2015-05-02 56 views
3

我們有一個帶有數組屬性的類,它有一個didSet觀察者。但是,當我們在這個數組上調用removeAtIndex時,我們調用了didSet觀察者。有什麼辦法可以阻止這種情況發生?removeAtIndex with didSet

var items: [String] = [] 
{ 
    didSet 
    { 
     println(self.items.count) 
    } 
} 
... 
func removeIndex(index: Int) 
{ 
    self.items.removeAtIndex(index) 
    // now didSet is called, but we don't want that 
} 

回答

1

didSet方法會自動調用,如果你不想在didSet方法中執行代碼行,下面的技巧可能適合你。

  1. 採取Bool變量,並在willSet觀測方法使它爲真,在這個布爾變量的狀態didSet方法檢查,如果真的忽略,並立即作出這樣的假。

  2. 在didSet觀察器方法中,您將獲得數組的oldValue並查找計數,並與當前計數進行比較。

+0

不是我希望的答案,但謝謝。爲什麼調用'removeAtIndex'會導致'didSet'被調用?我會認爲'didSet'只會在我重新指定屬性時調用,比如'self.items = ...'。 – Qiviut

0

很意外。

對我而言,我能夠維護一個索引變量,而不是從數組中拉出項目。