2016-07-26 2 views
1

私はサンプルクラスなどのようなタイプIntのプロパティをしました:プロパティのオブザーバーとその動作

class StepCounter { 
    var totalSteps: Int = 0 { 
     willSet(newTotalSteps) { 
      print("about to set steps to \(newTotalSteps)") 
     } 
     didSet { 
      if totalSteps > oldValue { 
       print("Added \(totalSteps - oldValue) steps") 
      } 

     } 
    } 
} 

今、私はこのクラスのインスタンスを作成し、そのように私のVAR totalStepsに番号を割り当てるとき:

let anObj = StepCounter() 

anObj.totalSteps = 2000 

予想通り、私はコンソール出力を得る:

about to set steps to 2000 
Added 2000 seteps 

富栄私がanObj.totalSteps -= 1を実行したとき、willSetの出力がabout to set steps to 1999となり、didSetが実行されることはありません。何が起きていて、なぜwillSetのprint文が実行されないのですか?助けてください、ありがとう。

答えて

1

あなたが持っているあなたのdidSetで:

if totalSteps > oldValue 

をしかし、あなたはanObj.totalSteps -= 1を行う際に、総ステップが古い値よりも大きくはありません!

したがって、printは期待通りに実行されません。 :)

+0

このような愚かな質問。ありがとう@ EricD。 :D – Dershowitz123

+0

ああ、間違いが起こる。どういたしまして。 :) – Moritz

関連する問題