シングルトンとは?
シングルトンとは、そのクラスのインスタンスが1つしか無いことを保証するための設計パターンです。
特徴
イニシャライザをprivateにする
イニシャライザをprivateにすることによってイニシャライザを使って外部からこのクラスのインスタンスを作ることができなくなります。
外部からイニシャライザを使ってインスタンスを作ろうとするとエラーになります。
クラス内にインスタンを生成する
自身のインスタンスを生成し、private指定の変数に格納しクラスプロパティにし、クラス内からのみインスタンスを参照できるようします。
インスタンスを外部から取得するクラスメソッドを作成
クラスメソッドを作成することで外部でインスタンスを作らずにSamクラスのインスタンスを取得できます。
サンプルコード
例1
/*イニシャライザをprivateにしているので、継承しようとするとエラーになるので、
final指定で継承を禁止する*/
final class Sam{
//private class var ins:Samm{
//get{return Samm()}
//}
private static let ins = Sam()
var c = 100
//イニシャライザをprivateにする
private init(){
}
class func getins()->Sam{
return ins
}
}
クラスにアクセス
var a = Sam.getins()
var b = Sam.getins()
a.c //100
b.c //100
b.c = 200
a.c //200
b.c //200
変数aに納められたインスタンスも、変数bに納められたインスタンスも同じクラス内のインスタンスを参照しているので、片方のクラス内変数cの値を変更するとどちらも変更されることになります。
このようにすることで外部からは1つのインスタンスしか使用できないようになります。
例2
final class Sam{
static let ins = Sam()
var c = 100
private init(){
}
}
var a = Sam.ins
var b = Sam.ins
a.c //100
b.c //100
b.c = 200
a.c //200
b.c //200