26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift のグローバル定数を Closure で初期化

Last updated at Posted at 2014-06-16

Objective-C の Singleton パターン。クラスメソッドを呼んで、 static な変数を dispatch_once で初期化して返すやつ。それを Swift でやる場合、そのまま移植すると Swift でシングルトン - Qiita のようになる。

もっと Swift ぽく書けないか試していたらこうできた。

MyClass.swift
let sharedMyClass:MyClass! = {
    println("closure invoked")
    let singleton:MyClass! = MyClass(name:"hoge")
    singleton.name = singleton.name! + "eeeeee"
    return singleton
}()


class MyClass
{
    var name:String? = nil
    
    init(name:String?) {
        self.name=name
    }
}

他所から sharedMyClass を参照したときにはじめて Closure が実行され初期化される。この Closure は dispatch_once で1回だけ実行される。let なので上書きはされない。

26
25
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
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?