Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした