LoginSignup
0
0

More than 5 years have passed since last update.

Swift 中的單例 (Singleton)

Posted at

在 Cocoa/Cocoa Touch Framework 中, singleton 是很常見的設計模式。

Objective-C 的寫法

在 Objective-C 時,需要去考慮到 once token ,並用 dispatch once 去初始化他,如下:

@interface MyManager: NSObject {
+ (instancetype)sharedManager;
}

@implementation MyManager {

+ (instancetype)sharedManager {
    static id _sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedManager = [[self alloc] init];
    });

    return _sharedManager
}

@end

基本的 Singleton

在 Swift 中就更簡單了,只要設定一個 let 變數,初始化完之後就不會再被變更了,如下

class MyManager: NSObject {
    static let sharedManager = MyManager()
}

加上客製化設定

在許多情境設定好 singleton 物件後,需要去做進一步的設定。

這時候可以使用 closure (類似於 Objective-C 中的 block) 去封裝初始化物件的程式碼後,再將這個物件回傳。

取得回傳的物件之後,再把值設定回指定的屬性即可:

class MyManager: NSObject {
    static let sharedManager: MyManager = { 
        // closure 裡面放置初始化的程式碼
        let manager = MyManager()
        // 進行進一步的設定
        return manager
        // 最後記得必須回傳這個物件
    }() // 這一行的 () 就是觸發執行這個 closure 的方式
}

參考資料

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0