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
なので上書きはされない。