前言
單例模式,是一種常用的軟件設(shè)計(jì)模式。在它的核心結(jié)構(gòu)中只包含一個(gè)被稱為單例的特殊類。通過(guò)單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例。即一個(gè)類只有一個(gè)對(duì)象實(shí)例。數(shù)學(xué)與邏輯學(xué)中,singleton定義為“有且僅有一個(gè)元素的集合”。
Swift3.0中的訪問(wèn)權(quán)限的關(guān)鍵字目前有五個(gè):open—public—internal(默認(rèn))—fileprivate—private。我這里面是由高到低依次排列的。
open:修飾的類(Class)在內(nèi)部和外部都可以被訪問(wèn)和繼承。修飾的函數(shù)(func)在模塊(Module)內(nèi)部和外部都可以被訪問(wèn)和重載(override)
public:修飾的類(Class)在內(nèi)部被訪問(wèn)和繼承,在外部只能訪問(wèn)。修飾的函數(shù)(func)在模塊(Module)內(nèi)部可以被訪問(wèn)和重載(override),在外部只能訪問(wèn)
internal:默認(rèn)訪問(wèn)級(jí)別,internal修飾符可寫(xiě)可不寫(xiě)。internal訪問(wèn)級(jí)別所修飾的屬性或方法在源代碼所在的整個(gè)模塊都可以訪問(wèn)。如果是框架或者庫(kù)代碼,則在整個(gè)框架內(nèi)部都可以訪問(wèn),框架由外部代碼所引用時(shí),則不可以訪問(wèn)。如果是App代碼,也是在整個(gè)App代碼,也是在整個(gè)App內(nèi)部可以訪問(wèn)。
fileprivate: 文件內(nèi)私有屬性和方法,僅在當(dāng)前文件中可以訪問(wèn),包括同一個(gè)文件中不同的類。
private: 私有屬性和方法,僅在當(dāng)前類中可以訪問(wèn),不包括分類。
擴(kuò)展關(guān)鍵字:final 修飾的類(class)任何地方都不能不能被繼承,修飾的函數(shù)(func)任何地方都不能被重載(override)。
進(jìn)入主題
單例寫(xiě)法一(通過(guò)final static 以及 private關(guān)鍵字修飾)
final ?class ?MySingleton: NSObject{
? ? ? ?static let ?shareSingleton = MySingleton()
? ? ? ?private override init() ?{}
}
單例寫(xiě)法二(通過(guò)靜態(tài)屬性的返回值就是私有類)
private let single = SingletonClass()
final class SingletonClass:NSObject{
? ? ? ? static var shareClass:SingletonClass{
? ? ? ? ? ? ? return ?single
? ? ? ? ? }
? ? ? ? ?fileprivate ?override ?init() ?{}
}
單例寫(xiě)法三(通過(guò)靜態(tài)屬性的返回值就是一個(gè)結(jié)構(gòu)體的參數(shù)值)
final ?class ?SingletonClassWithOther:NSObject{
? ? ? ? static ?var ?shareOther:SingletonClassWithOther{
? ? ? ? ? ? ? ? ? ?struct ?StartUse{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?static ?let ?sureValue:SingletonClassWithOther=SingletonClassWithOther()
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? return? StartUse.sureValue
? ? ? ?}
? ? ? private ?override ?init() {}
}
最后調(diào)用如下: