如何区分实例成员与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 "
}
}
答案 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
}
}