我想在我自己的类中设置一个属性,它有一个没有调用setter的setter。那可能吗?
override var textColor: UIColor? {
set {
super.textColor = newValue
// some additional code here
}
get {
return super.textColor
}
}
我尝试像_textColor = UIColor.blackColor()
那样设置,但这不起作用。我希望“一些额外的代码”仅在从外部设置textColor
而不是在我自己的类中设置时运行。
答案 0 :(得分:2)
如果您需要双重访问控制,则可以创建私有存储属性,并通过计算属性将其公开。但是在您的情况下,存储的属性已经在超类中实现,因此解决方案“按原样”将不起作用。
实现所需要的唯一方法是创建2个计算属性,一个用于外部使用,另一个用于内部:
private var _textColor: UIColor? {
get { return super.textColor }
set { super.textColor = newValue }
}
override var textColor: UIColor? {
get { return super.textColor }
set {
super.textColor = newValue
// Additional processing here
}
但在这种情况下,您必须记住在类代码中使用私有代码
答案 1 :(得分:1)
这是不可能的。您必须定义一个额外的变量并将其保密。 E.g。
private var _textColor: UIColor?
override var textColor: UIColor? {
set {
_textColor = newValue
super.textColor = newValue
// some additional code here
}
get {
return _textColor
}
}