如何覆盖这个 Swift 属性?
Posted
技术标签:
【中文标题】如何覆盖这个 Swift 属性?【英文标题】:How can I override this Swift property? 【发布时间】:2016-05-24 05:50:34 【问题描述】:class Base: UIViewController
var rightButtonColor: UIColor = UIColor.blueColor()
class SecondViewController: Base
override var rightButtonColor: UIColor
return UIColor.redColor()
我收到一个错误:
使用 Objective-C 选择器的“rightButtonColor”获取器 'rightButtonColor' 与来自的 'rightButtonColor' 的 getter 冲突 具有相同 Objective-C 的超类“Base” 选择器
【问题讨论】:
您根本无法用只读属性覆盖读写属性。 OOP 的一个关键规则是您始终可以将子类传递给任何期望其超类的东西。对于期望超类的东西,您的属性是可读写的——但如果您传入子类,则不是。请注意,如果您反转此示例(尝试使用读写属性覆盖只读属性),它会起作用(尽管您的读写属性必须是计算出来的,因为您不能在覆盖)。 【参考方案1】:试试这样:
class Base: UIViewController
var rightButtonColor: UIColor
return UIColor.blueColor()
class SecondViewController: Base
override var rightButtonColor: UIColor
return UIColor.redColor()
【讨论】:
【参考方案2】:rightButtonColor
的两个不同声明具有不同的类型。如果您确保它们是完全相同的类型,它可以干净地编译:
class Base: UIViewController
var rightButtonColor: UIColor
return UIColor.blueColor()
class SecondViewController: Base
override var rightButtonColor: UIColor
return UIColor.redColor()
【讨论】:
以上是关于如何覆盖这个 Swift 属性?的主要内容,如果未能解决你的问题,请参考以下文章