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

最佳答案

这是一个奇怪的错误,我们可以讨论一下是否是编译器错误,实际上允许它用静态变量遮盖非静态变量,但是请注意,拥有两个具有相同名称的属性绝对是不好的代码,一个静态和非静态的,因为最后一个会遮盖前一个。 defaultTextColor可能是一个更好的名称。

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

super.textColor = ...

关于ios - 在Swift 3中将类与具有相同名称的实例成员区分开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39020146/

10-08 23:27