Swiftのシングルトンの実装方法はdispatch_once
を使う方法やグローバル定数
を使う方法などあります。
参照:http://qiita.com/susieyy/items/acb3bc80a1dafe64cffd
一方で、私はシングルトンで管理されているインスタンスをリセット(削除)できる実装を考えてみました。そもそもシングルトンで管理されたインスタンスを削除するという行為自体が、邪道なのかもしれませんが、クラス自体を一旦クリアにしたいという用途も発生するのかなと。。。
ソース
swift 1.1
class User {
private struct Static {
static var instance: User?
}
class var sharedInstance: User {
if let instance = Static.instance {
return instance
}
Static.instance = User()
return Static.instance!
}
func deleteSharedInstance() {
Static.instance = nil
}
var i = 0
func increment() {
i++
}
}
swift 1.2
※クラス内メソッドでstatic宣言が使える
class User {
private static var instance: User?
class var sharedInstance: User {
if let instance = instance {
return instance
}
instance = User()
return instance!
}
func deleteSharedInstance() {
User.instance = nil
}
var i = 0
func increment() {
i++
}
}
使用例
User.sharedInstance.increment() // 1
User.sharedInstance.increment() // 2
User.sharedInstance.increment() // 3
User.sharedInstance.increment() // 4
User.sharedInstance.increment() // 5
User.sharedInstance.deleteSharedInstance()
User.sharedInstance.increment() // 1
User.sharedInstance.increment() // 2