>

현재 클래스 open var deviceIdentifier: String? 에 변수가 있습니다  세터를 open private(set) var deviceIdentifier: String? 로 바꾸는 것만 사용하고 싶습니다.

그 방법이 있습니까? 두 줄을 모두 넣으려고했지만 Xcode가 좋아하지 않는 충돌입니다.

@available(*, deprecated)
open var deviceIdentifier: String?
open private(set) var deviceIdentifier: String?

컴파일러를 계산 된 변수로 바꾸면 컴파일러는 행복하지만 그것을 피하고 싶습니다. 이것이 유일한 방법입니까, 예상대로 작동합니까?

private var _deviceIdentifier: String?
open var deviceIdentifier: String? {
    get {
        return _deviceIdentifier
    }
    @available(*, deprecated)
    set(newValue){
    }
}


  • 답변 # 1

    지금이 작업을 수행하는 유일한 방법은 계산 된 변수를 사용하는 것이지만 예상대로 작동합니다.

    //TODO: put back to non-computed variable when making set private
    private var _deviceIdentifier: String?    
    open var deviceIdentifier: String? {
        get {
            return _deviceIdentifier
        }
        @available(*, deprecated)
        set(newValue) {
            _deviceIdentifier = newValue
        }
    }
    
    

  • 답변 # 2

    private(set) var deviceIdentifier: String? 를 배치하는 것으로 충분하다고 생각합니다 , 누군가가이 변수의 값을 설정하려고하면 컴파일러는 불가능하다고보고합니다.

    속성에 할당 할 수 없음 : 'deviceIdentifier'setter에 액세스 할 수 없음">

관련 자료

  • 이전 excel - 런타임 오류 1004가 발생했습니다 내가 뭘 잘못하고 있는지 잘 모르겠습니다
  • 다음 ruby - 레일에 이메일을 보내는 버튼