使用默认值的Swift public var并为该默认值运行didSet

时间:2016-09-19 11:17:15

标签: ios swift initialization

我将Swift类作为下面的简单代码:

class FavoriteView: UIView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    convenience init() {
        self.init(frame: CGRectZero)
    }
    private func commonInit() {
        // init something
    }

    // MY PROBLEM IS HERE
    var favoriteCount: Int = 0 {
        didSet {
            // update the view
        }
    }
}

逻辑是,只要favoriteCount设置为新值,就会运行didSet中的代码。

运行良好。但问题是代码(didSet)不是第一次运行。我的意思是当一个新的FavoriteView实例被初始化时,我认为它也可以运行,但它不是。

有没有办法第一次运行该代码(在didSet中)。

谢谢!

1 个答案:

答案 0 :(得分:6)

didSet观察者未使用默认值调用,以及在init方法中设置属性时未调用(由于self尚未初始化)。您可以编写单独的方法updateView,并在init观察者didSet方法中调用它。

private func commonInit() {
    updateView()
    // init something
}

// MY PROBLEM IS HERE
var favoriteCount: Int = 0 {
    didSet {
        updateView()
    }
}

func updateView() {
    //code that you wanted to place in observer
}