在swift中绕过属性的setter

时间:2015-08-13 08:40:50

标签: swift

我想在我自己的类中设置一个属性,它有一个没有调用setter的setter。那可能吗?

override var textColor: UIColor? {
    set {
        super.textColor = newValue
        // some additional code here
    }
    get {
        return super.textColor
    }
}

我尝试像_textColor = UIColor.blackColor()那样设置,但这不起作用。我希望“一些额外的代码”仅在从外部设置textColor而不是在我自己的类中设置时运行。

2 个答案:

答案 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
    }
}