2016-07-26 71 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 

卜t當我做anObj.totalSteps -= 1,我只得到willSet輸出說about to set steps to 1999didSet永遠不會執行。發生了什麼以及爲什麼我沒有執行willSet打印語句?幫忙,謝謝。

回答

1

在你didSet您有:

if totalSteps > oldValue 

但是當你做anObj.totalSteps -= 1,總的步驟並不比舊值越大!

因此,print未按預期執行。 :)

+0

這樣一個愚蠢的問題。謝謝@EricD。 :D – Dershowitz123

+0

呃,發生錯誤。別客氣。 :) – Moritz