LoginSignup
10
14

More than 5 years have passed since last update.

Swiftのシングルトンパターンでリセットもできる実装

Last updated at Posted at 2015-03-23

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
10
14
0

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
10
14