Objective-C は、GCD でdispatch_once_t を使用して、内部のコードが 1 回だけ呼び出されるようにし、それによってシングルトンのスレッドの安全性を確保します。
ただし、Swift では本来の Dispatch Once メソッドが廃止されているため、Once を使用してシングルトンを作成することはできません。
struct を使用して型変数を保存し、let を使用してスレッドの安全性を確保できます。
(1) オプション 1
class Manager {
class var sharedManager: Manager {
struct Static {
static let sharedInstance: Manager = Manager()
}
return Static.sharedInstance
}
}
(2) オプション 2
class Manager {
class var sharedManager: Manager {
return sharedInstance
}
}
private let sharedInstance = Manager()
(3) オプション 3
class Manager {
static let sharedInstance = Manager()
}