Swift で簡単なシングルトンの実装方法

  • 92
    いいね
  • 2
    コメント

Swift で マネージャー系のコードを書く時にはシングルトンの実装を迫られる場合があります。インスタンスとしていくつも存在されても困る場合があるからです。そんな時に便利な二つのイディオムを紹介します。

通常のシングルトン

class Manager {
    static let sharedManager = Manager()
    private init() {
    }
}
  • static let の構文
  • initprivate にする
  • 初期化がインスタンスの生成がシンプルな場合に便利

クロージャーを使ったシングルトン

class Manager {
    static var sharedManager: Manager = {
        return Manager()
    }()
    private init() {
    }
}
  • static var の構文
  • initprivate にする
  • インスタンスはクーロージャ内 { } で生成して、return 文で戻す
  • クロージャーの最後の () を忘れないで
  • インスタンスの生成の為に、ファイルやリソースを用意したりなど、いくつかステップを踏む必要がある場合に便利

(EDIT: 表現を変更しました)

どちらでも、シングルトンのオブジェクトを生成します

var manager1 = Manager.sharedManager
var manager2 = Manager.sharedManager
manager1 === manager2 // true

initprivate が付いているので、基本的には直接生成はできません。ただし、同じソースファイルから呼び出す場合はその限りではありません。Playground で試す場合は要注意ですね。


【参考情報】
Swiftでシングルトンパターンを実装する3つの方法
http://qiita.com/susieyy/items/acb3bc80a1dafe64cffd