2015-04-05 96 views
3

我有一個類屬性與財產觀察員。如果我在那類改變的東西,有沒有觸發didSet的方式例所示:在更改類中的屬性時,有沒有辦法讓didSet工作?

class Foo { 
    var items = [1,2,3,4,5] 
    var number: Int = 0 { 
     didSet { 
      items += [number] 
     } 
    } 
} 

var test: Foo = Foo() { 
    didSet { 
     println("I want this to be printed after changing number in test") 
    } 
} 

test.number = 1 // Nothing happens 

回答

6

什麼也沒有發生,因爲觀察者是test,這是一個富實例。但是您更改了test.number,而不是test本身。 Foo是一個類,一個類是一個引用類型,所以它的實例是可變的。

如果你想看到的日誌信息,設置test本身爲不同的值(例如不同的Foo())。

或者,println語句添加到其他didSet,你已經有了在Foo的number屬性之一。或者,讓Foo成爲一個結構而不是一個類;更改結構屬性確實替換結構,因爲結構是一個值類型,而不是引用類型。

+1

當然...有時我想打我自己試圖找到一個小時的答案,而我應該只使用一個結構......謝謝! – 2015-04-05 03:47:42

+0

您可能想看看我的書,我總結了值類型與參考類型行爲之間的差異:http://www.apeth.com/swiftBook/ch04.html#SECreferenceTypes對「didSet」的響應結構體對struct結構屬性的改變是我給出的第一個例子之一。 – matt 2015-04-05 04:35:58

相關問題