2017-05-22 16 views
2

나는 readOnly 레이블이있는 프로토콜을 작성하고 있습니다. 이를 확장하여 일치하는 유형이 UITextView 인 기본 구현을 제공하고자합니다.어떻게 프로토콜을 개인용으로 확장 할 수 있습니까?

코드 :

protocol CountingView { 

    var keyboardLabel : UILabel {get} 
} 

extension CountingView where Self : UITextView { 

    var keyboardLabel : UILabel { 
     get { 
      let label = UILabel() 
      label.textColor = UIColor.white 
      label.translatesAutoresizingMaskIntoConstraints = false 

      return label 
     } 
     private (set) { 
     keyboardLabel = newValue 
     } 
    } 
} 

그러나 나는 다음과 같은 오류를 얻을 set 전에 private를 추가 할 때.

예상 '수', '설정', 'willSet'또는 'didSet'키워드는 내가이 오류와 함께 다른 질문을 보았지만 찾지 않았던 접근 정의

를 시작합니다 그들은 내 것과 관련이 있습니다.

+2

확장 * 할 수 없습니다 * 저장된 속성을 추가 할 수 있습니다. 세터는 반복적으로 자신을 호출합니다. https://stackoverflow.com/questions/44063181/protocol-extension-in-swift-3을 비교하십시오. –

+0

@ MartinR ummm. 승인. 여기서 답이 잘못되었다는 뜻입니까? – Honey

+0

글쎄, 당신의 * 질문은'private (set)'컴파일하는 법이다. * 대답은 정확할 것 같다. 필자가 컴파일 할 경우에도 setter'keyboardLabel = newValue'의 * 구현 *이 의도 한대로 작동하지 않는다는 것이 요점입니다. –

답변

4

당신은 단지 잘못된 장소에 민간이 있습니다

private(set) var keyboardLabel : UILabel { 
    get { 
     let label = UILabel() 
     label.textColor = UIColor.white 
     label.translatesAutoresizingMaskIntoConstraints = false 

     return label 
    } 
    set { 
     keyboardLabel = newValue 
    } 
} 
0

단순히이로 계산 된 재산 private합니다

public private(set) var keyboardLabel : UILabel { 
    get { 
     let label = UILabel() 
     label.textColor = UIColor.white 
     label.translatesAutoresizingMaskIntoConstraints = false 

     return label 
    } 

    set { 
     keyboardLabel = newValue 
    } 
}