2016-09-19 41 views
2

我有我的雨燕類,如下簡單的代碼運行didSet:斯威夫特公共變種使用默認值,併爲默認值

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)。

謝謝!

回答

2

didSet未使用默認值調用觀察者,以及在設置init方法中的屬性時(由於self尚未初始化)而未調用觀察者。您可以編寫分離的方法updateView並在init方法中調用觀察者。

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 
}