2016-08-15 2 views
1

私のiOSアプリケーションのUIは複雑なので、ボタンやビューを有効/無効/表示するときに混乱することがあります。いくつかの考えの後で、私はアプリが3つの州だけを持っていると思う:アイドリングレコーディング遊ぶSwift/iOS:計算されたプロパティを使用してUIアップデートをトリガしました。これはより良いです:didSet、willSetまたはset?

enum型の計算されたプロパティ変数AppStateを作成しました。これを使用して状態の変化を観察し、それに従ってUIを更新することができます。 UIの変更の中には、ボタンの表示や無効化、カスタムビューからカスタムオブジェクトを削除するものがあります。

var curState : AppState = .Idling { 
    didSet { 
      if newValue != oldValue { 
      updateUI() // ?? better here? 
      } 
    } 
    willSet(newValue) { 
     updateUI() // ?? good here? 
    } 
    set { 
     updateUI() // ?? good here 
    } 
} 

私はupdateUI()メソッドを呼び出すために上記setを使用している、それが正常に動作しますが、私は優れている3人の観察者のどの知りたいのですが? willSetまたはdidSetを試していませんが、didSetを使用しているため、UIを更新する前にoldValuenewValueを比較できます。私は間違っている可能性があります、私はここでアドバイスのためのすべての耳です。

ありがとうございます!

+1

ストアドプロパティを扱う場合、 'willSet'と' didSet'がより適切です。あなたが設定した値に基づいてUIを更新しようとしているなら、 'didSet'はそれを行うための論理的な場所です。計算されたプロパティを使用している場合にのみ 'set'を使用しますが、ここではストアドプロパティを扱っているので、実際には関係ありません。 – Rob

答えて

1

setは、実際に受信者の値を設定するロジックにのみ使用してください。それから、前後の任意のコードを呼び出すことができますが、そうしないでください。

たとえば、あなたが行うことができます:

var foo = Int { 
    set { 
     beforeSettingFoo() //Don't do this 
     setFoo() 
     AfterSettingFoo() //Don't do this 
    } 
} 

を代わりに、あなたの意図をより明確にするためにwillSetdidSetにロジックを観察するプロパティを移動:

var foo = Int { 
    willSet { 
     beforeSettingFoo() 
    } 

    set { 
     setFoo() 
     AfterSettingFoo() //Don't do this 
    } 

    didSet{ 
     afterSettingFoo() 
    } 
} 

をあなたの特定のケースでは、古い値と新しい値の両方にアクセスしたいので、willSetを使用する必要があります。

関連する問題