2016-08-18 2 views
1

인스턴스 멤버를 Swift 3에서 같은 이름을 가진 클래스 멤버와 어떻게 구별합니까? 무엇 일반적 전에 지금 일하고은 엑스 코드에서 오류가 발생 8 베타 5 :Swift 3에서 동일한 이름을 가진 인스턴스 멤버와 클래스 차별화

"정적 멤버 '텍스트 색상은'유형 UITag의 인스턴스를 사용할 수 없습니다"

public class UITag : UILabel { 

    static var textColor = UIColor.white 

    override public init(frame: CGRect) { 
     super.init(frame: frame) 

     textColor = UITag.textColor /* error: static member cannot be used on instance of type UITag */ 
     text  = " not set " 
    } 
} 
+0

정적 제거 = UITag.textColor하지 않는 명시 적 self.textColor을 추가하는 것을 한 번 –

+0

참고하려고 예를 아래에 txtColor 유사하다 부모 클래스의 인스턴스 변수를 호출 help –

+0

@ Anbu.Karthik : 정적은 인스턴스 하나와 같은 구성원이 아닙니다. –

답변

0

이 이상한 오류이며, 우리는 실제로 어떤 그림자하도록 허용 컴파일러의 버그가 있는지 여부를 논의 할 수 n-static 변수를 정적 변수와 함께 사용하는 것이 좋습니다. 그러나 동일한 이름을 가진 두 개의 속성 (하나는 정적이고 다른 하나는 정적이 아닙니다)은 마지막 코드가 이전 코드를 어둡게하기 때문에 분명히 나쁜 코드입니다. 아마 defaultTextColor이 더 나은 이름이 될 것입니다.

super.textColor = ... 
0

좋아, 유일한 해결 방법 I 지금까지 발견했습니다 '은 다음과 같이 명시 적으로 자신을 캐스팅하는 것입니다

(self as UILabel).textColor = UITag.textColor 
0

textColor 변경할 수없는 정적 변수이다

간단한 해결 방법은 사용하는 것이다. 이 값은 UITag.textColor으로 만 사용할 수 있습니다.

super.textColor = UITag.textColor

은 기본적으로 다시

public class UITag : UILabel { 

    static var textColor = UIColor.white 
    var txtColor = UIColor.red 

    override public init(frame: CGRect) { 
     super.init(frame: frame) 

     super.textColor = UITag.textColor 
     txtColor = UITag.textColor 
    } 
} 
관련 문제