Swiftのクラスイニシャライザについてのまとめ
Swiftのクラスのイニシャライザについてのまとめとなります。
イニシャライザとは?
クラスがインスタンス化される際にプロパティを初期化することができます。
例えば、車クラスを作成しインスタンス化するとします。
class Car { color = "Red" }
このCarクラスはインスタンス化する度に赤色の車を生成します。
例えば、ここで車の色を赤ではなく黒にしたいとしましょう。
方法は二つあります。シンプルに考えるならば、インスタンス化した赤色の車を黒に塗り直す方法。
class Car { color = "Red" }
let myCar = Car() //クラスのインスタンス化
print(myCar.color) //この時点ではまだRed
myCar.color = "Black" //colorをBlackに変更
一見、シンプルなようにも見えますが少し面倒ですね。
一度、赤色で車を生産→もう一度工場に戻して黒色に塗り直す。このような感じでしょうか。
イメージだけではなく、コードとしても書き辛いものになります。
init() Swiftでイニシャライザを使う
それならばいっそのこと、インスタンス化する際に色を指定すればよいのでは?と思いませんか?
こうしたケースで活躍するのがイニシャライザです。インスタンス化する際にプロパティを指定することができます。
class Car {
color = "Red"
init(choseColor : String) {
color = choseColor }
}
let myCar = Car(choseColor : "Black")
print(myCar.color) =>"Black"
インスタンス化する際にプロパティを引数として渡してあげることで、車の色を自由に変更することができるようになりました。
一つ弊害が生まれる
問題は解決したように見えましたが、また新しい問題も発生しました。
車の色をインスタンス化する度に自由に変更できるようになりましたが、毎回色を指定しないといけなくなってしまいました。
これはこれで面倒ですよね。できればデフォルトは赤色で生産し、要望がある時だけ黒や青などの車体を生産したいとします。
そうした時にはconvenience initで実装することができます。
class Car {
color = "Red"
init() {}
convenience init(choseColor : String) {
self.init() color = choseColor
}
}
let myCar = Car()
let customCar = Car(choseColor : "Blue")
もし、convenience initの記述がない場合、色の指定をせずにインスタンス化するとエラーが出てしまいます。
デフォルトの色か、自分で色を選択するか選べるようになりました。