在Swift 3中将类与具有相同名称的实例成员区分开来

时间:2016-08-18 13:57:31

标签: ios swift3

如何区分实例成员与Swift 3中具有相同名称的类成员?之前通常工作的是Xcode 8 beta 5中的错误:

  

"静态成员' textColor'不能用于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 "
   }
}

3 个答案:

答案 0 :(得分:0)

好的,到目前为止,我发现的唯一解决方法是明确地将自己投射如下:

(self as UILabel).textColor  = UITag.textColor

答案 1 :(得分:0)

这是一个奇怪的错误,我们可以讨论它是否是一个编译器错误,它实际上允许用静态变量隐藏非静态变量,但请注意,具有相同的两个属性肯定是错误的代码name,一个静态而一个不是静态的,因为最后一个将影响前一个。可能defaultTextColor可能是一个更好的名字。

一个简单的解决方法是使用:

super.textColor = ...

答案 2 :(得分:0)

textColor是一个静态变量,无法更改。您只能将其值用作UITag.textColor

super.textColor = UITag.textColor这基本上再次调用父类的实例变量,类似于下面示例中的txtColor

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
    }
}