2016-03-29 43 views
1

嗨我寫信關於職位https://appventure.me/2015/10/17/advanced-practical-enum-examples/#sec-4-2如何在屬性觀察者(didSet,willSet)中使用枚舉?

如何在屬性的didSet中使用觀察者模式中的枚舉?我嘗試了各種方法,但對我來說沒有多大意義。

有人可以澄清一個例子嗎?我試圖找出答案,因爲解決方案可能是有趣的,並有助於保持代碼清潔。

這是從文章中,我談論的摘錄:

Observer模式

有是在雨燕造型觀察各種方式。 (...)didSet語法可以輕鬆實現簡單的觀察。枚舉可以在這裏使用,以便使觀察對象發生的變化類型更加清晰。想象一下收集觀察。如果我們考慮一下,我們只有幾個可能的情況:插入一個或多個項目,刪除一個或多個項目,更新一個或多個項目。這聽起來像一個枚舉工作:

enum Change { 
    case Insertion(items: [Item]) 
    case Deletion(items: [Item]) 
    case Update(items: [Item]) 
} 

然後,觀察對象可以接受的一個非常乾淨的方式發生了什麼具體的信息。這可以通過添加oldValue和newValue來輕鬆擴展。

感謝

回答

0

我覺得文章打算在句子,因爲它是在觀察一個通用的部分來分別讀取。 didSet與簡單的實例變量一起使用,因爲它們提出的枚舉將用於包含集合中正在觀察的更改的詳細信息。枚舉將很有用,因爲您可以切換類型,然後使用內容來了解​​更改的詳細信息。

你可以有一個簡單的實例變量,這樣就可以用這些變化信息設置枚舉值,但它不合邏輯而且雜亂,這不是一個好的方法。枚舉更適合於在定義到觀察者的回調並因此控制傳遞的變量時設置的自定義觀察。

+0

謝謝。這澄清了很多。你說他們提議的枚舉將被用來包含集合中正在觀察到的變化的細節。你能舉出一個簡單的例子:「在集合**中觀察到的變化」? –

+0

我會想象一個控制器,或者一個包裹的集合,它可以被編輯並允許觀察者。這些編輯可能會批處理。當編輯完成時,觀察員會收到通知。一個符合協議的觀察者列表,該協議有一個func collectionChanged(collection:XCollection,change:ChangeEnum)'',其中'XCollection'是控制器或包裝類。 – Wain