Swift學習之每日一tip (6) 單例

來源:互聯網
上載者:User

標籤:單例   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) 單例

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.