swift シングルトンについて

シングルトンについてまとめておく。

シングルトンパターンはインスタンスが1個しか生成されないことを保証したい時に使います。

今回は var countをいろんな画面で利用したい。

このように書きます。

class IventId {
    static let iventCount = IventId()
    private init() {
    }
    var count:Int = 0
}

staticはアドレスが固定されます。そこに自身のインスタンスを詰め込むことで、一意性が担保されます。

private init() していますので、外部からのインスタンス生成もブロックします。

これだけでかけるのは素敵! Swift!

利用は このようにアクセスします。

IventId.iventCount.count -= 1

UNUserNotificationCenterのdelegateにインスタンスをセットするときがありますが、その場合に利用できます。

通常は構造体でも実装できるみたいです。

protocol MyProtocol {
    static func foo()
}
struct MyStruct1: MyProtocol {
    static func foo() { print("foo1") }
}
struct MyStruct2: MyProtocol {
    static func foo() { print("foo2") }
}
// 引数をProtocolのTypeで受ける
func bar(_ p: MyProtocol.Type) { p.foo() }
// 実装structによって振る舞いを変えられる
bar(MyStruct1.self) // "foo1"
bar(MyStruct2.self) // "foo2"

引数にMyProtocol.Typeと記載しているのは宣言時なので。

値を返すときはself. を利用します。

参考サイト。こちらのほうがわかりやすいです。

medium.com

.Typeについて

https://docs.swift.org/swift-book/ReferenceManual/Types.html