2017-01-23 41 views
1

我有一個Swift單例類,通過存儲幾個數組來維護應用程序狀態。這裏最好的做法是什麼?我們是否應該改變它,如果我們這樣做,那麼如何呢?Swift:重構單例模式

這裏是單例類:

import Foundation 


class FilterModel { 
    static let sharedInstance = FilterModel() 
    private init() { } 

    var muscleExercisesArray = [Int]() 
    var equipmentExercisesArray = [Int]() 
    var typeExercisesArray = [Int]() 
} 
+0

添加NSCoding,以便可以在應用程序啓動之間持續保存數據 – muescha

回答

2

如果你想知道有關的基本單件模式,一些觀察:

  1. 我可能會建議你聲明類是final也是爲了避免讓一些未來的開發者對它進行子類化,並引入關於什麼類型sharedInstance引用的混淆。

  2. 我也可能會建議,在Swift 3中,約定是將sharedInstance的名稱簡化爲shared。這不是一條硬性規定,而是新興的標準。

  3. 此實現不是線程安全的。如果你確定的話,我至少會在評論中包含一些警告,警告未來的開發者這個問題。或者,顯然,通過一些內部的同步機制,您可以通過將其全部包裝到線程安全中來改變這一點。


你說:

單身被認爲是對應用程序架構個不錯的辦法,所以我不知道該怎麼做,而不是它的時候,我們需要維護應用程序的狀態。不知怎的,我無法找到任何東西在網上除了DI做法不工作(或我不知道如何)在這種情況下,當我們需要的應用程序狀態,通過不同的文件

是被修改,單身是不理想的模型對象有許多原因(使得單元測試更難;責任不清楚等),並且有更好的模式(參見What's Alternative to Singleton)。至少,一個簡單的方法是讓應用程序委託或根視圖控制器實例化此模型對象,然後僅將其傳遞給任何後續控制器需要訪問的對象(例如,在prepareForSegue中)。這樣就明確了哪些對象可能與模型進行交互,使責任更加清晰。

+0

單身人士被認爲是一種糟糕的應用程序體系結構方法,所以我想知道當我們需要維護應用程序狀態時該做什麼而不是它。不知怎的,我找不到任何網上的東西,除了DI方法,在這種情況下,我們需要應用程序狀態被不同的文件修改 –

+0

啊哈,明白了,這種方法不起作用(或者我不知道如何)。謝謝! –