swift 클래스에서 다른 클래스의 변수를 사용하는 법

조회수 1703회

예를 들어 class a{ var aa = 1 }

class b{ print(aa) // 1 aa = 2 print(aa) // 2

}

a클래스의 aa변수를 b에서 사용하는 방법이 있나요?

1 답변

  • class a {
        var aa = 1
    }
    
    class b {
        print(aa) // 1
        aa = 2
        print(aa) // 2
    }
    

    이 코드를 작성하신 것 같은데요. class 선언 안에서는 print() 같은 실행 코드를 넣을 수 없습니다. a 클래스에는 문제가 없으나, b 클래스를 저렇게 정의하면 컴파일 에러가 납니다. 따라서 아래와 같이 수정하셔야 합니다.

    class a {
        var aa = 1
    }
    
    class b {
        func myMethod() {
            print(aa) // 1
            aa = 2
            print(aa) // 2
        }
    }
    

    질문하신 내용은 b 클래스에서 a의 property를 접근하는 방법을 여쭤보셨는데요. 이는 두가지 방법이 있습니다.

    1. a 클래스를 init 한 후, 해당 reference에서 Property로 접근한다.
    2. a 클래스의 aa property를 Static Property로 변경한다.

    1번부터 설명드리면 아래와 같이 됩니다.

    class a {
        var aa = 1
    }
    
    class b {
        func myMethod() {
             // MARK: - Property
            let firstObject: a = .init()
            print(firstObject.aa) // 1
            firstObject.aa = 2
            print(firstObject.aa) // 2
    
            let secondObject: a = .init()
            print(secondObject.aa) // 1
            secondObject.aa = 2
            print(secondObject.aa) // 2
    
            firstObject.aa = 3
            print(firstObject.aa) // 3
            print(secondObject.aa) // 2
        }
    }
    

    firstObjectsecondObject의 객체들은 reference가 다르기 때문에, 각각 aa의 값이 다릅니다.

    이제 2번을 설명해 드리면,

    class a {
        var aa = 1
        static var bb = 10
    }
    
    class b {
        func myMethod() {
            // MARK: - Property
            let firstObject: a = .init()
            print(firstObject.aa) // 1
            firstObject.aa = 2
            print(firstObject.aa) // 2
    
            let secondObject: a = .init()
            print(secondObject.aa) // 1
            secondObject.aa = 2
            print(secondObject.aa) // 2
    
            firstObject.aa = 3
            print(firstObject.aa) // 3
            print(secondObject.aa) // 2
    
            // MARK: - Static Property
            print(a.bb) // 10
            a.bb = 30
            print(a.bb) // 30
    
            print(firstObject.aa) // 3
            print(secondObject.aa) // 2
        }
    }
    

    Static Property를 쓰면 init을 안해도 코드 전역에서 접근이 가능합니다.

    Swift 공부를 포기하지 마시고 열심히 하셨으면 좋겠습니다.😃

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)