2016-08-18 80 views
1

如何区分Swift 3中具有相同名称的类成员的实例成员?什么是前通常现在的工作在Xcode中产生误差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

消除静电,并尝试一次 –

+0

注意添加明确self.textColor = UITag.textColor不帮助 –

+0

@ Anbu.Karthik:静态不是实例的成员。 –

回答

0

这是一个奇怪的错误,我们可以讨论它是否是一个它实际上是允许阴影没有一个编译器错误带有静态变量的n-static变量,但请注意,具有相同名称的两个属性绝对是错误的代码,一个是静态的,另一个不是静态的,因为最后一个会覆盖前一个。可能defaultTextColor将是一个更好的名字。

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

super.textColor = ... 
0

好,唯一的解决方法我到目前为止,已经找到是显式转换自我如下:

(self as UILabel).textColor = UITag.textColor 
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 
    } 
} 
相关问题