2016-09-19 4 views
2

そのデフォルト値のためdidSetを実行します。スウィフトパブリックデフォルト値を持つvarと私は以下の単純なコードとして私スウィフトクラスを持って

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 observerは、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 
} 
関連する問題