標籤:單例 oc swift ios
近日,在翻看以前寫過的一些OC應用的時候,看到了OC的單例,然後暮然想要試著寫一寫Swift下的單例,於是,在經過一番波折後,終於將Swift下的單例寫了出來。
OC下的單例實現
栗子:+ (instancetype)sharedNetworkTools { //定義一個任意類型的靜態執行個體 static id instance; static dispatch_once_t onceToken; // 第一次進入dispatch_once中,onceToken == 0 // 進入過一次後, onceToken == -1 dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance;}
OC下的單例大家都寫的滾瓜爛熟了,那麼今天我就帶大家先以仿照OC的方式寫一段Swift下的單例實現
Swift下的單例1.仿照OC版本
//定義一個全域的靜態變數static var instance: NetworkTools?//由於在Swift中,閉包內部不能寫static函數,所以,只能放在外面實現啦!static var onceToken: dispatch_once_t = 0// 全域的訪問點class func sharedNetworkTools() -> NetworkTools { dispatch_once(&onceToken, { () -> Void in self.instance = NetworkTools() }) return instance!}
怎麼樣?看起來是不是和OC及其相似呢?那小湯我建議你可以把代碼忘掉,按照你的想法寫一遍Swift版的單例,你就會發現它暗含的一些小坑啦~
下面,小湯我給大家帶來在Swift下特別的單例實現方案~小湯我表示大愛哦~哇嘎嘎!
2.Swift特色版
// 定義一個私人的靜態成員private static let instance = NetworkTools()class func sharedNetworkTools() -> NetworkTools { return instance}
是不是好簡單!!!
在Swift中, let
就是安全執行緒的,同時,作為一個常量會被儲存在常量區中,另外,instance = NetworkTools()
是懶載入的,在第一次調用的時候,才會運行.
好了,今天的知識分享就到這裡了~歡迎大家對小湯的部落格提出寶貴的建議哈~另附github地址 https://github.com/SarielTang,有興趣的幫忙點點贊啥的哈~
Swift學習之每日一tip (6) 單例