Swiftの基本 イニシャライザ、パート2

パート1でイニシャライザの定義、挙動を見ました。そこで次のサンプル(sample1)

sample1

struct Sample{
    let prop1:Int    //構造体定義時にプロパティを初期化していない
    let prop2:String
    let prop3:String
    //イニシャライザを定義していない
}

let sample1=Sample(prop1:10,prop2:"wow",prop3:"good")

print(sample1.prop1)
print(sample1.prop2)
print(sample1.prop3)
10
wow
good

構造体Sample型に定義されているのは

prop1(Int型)

prop2(String型)

prop3(String型)

のみで、イニシャライザは定義されていません。さらに構造体Sample定義時にプロパティを初期化していません。しかし実際実行すると期待通りに結果が出力され、エラーは出ません。つまりイニシャライザを定義していないが、すべてのプロパティが初期化されています。


構造体の場合、イニシャライザを自分で定義しない場合、自動的にメンバワイズイニシャライザ(memberwise initializer)が内部的に用意されます。

メンバワイズイニシャライザは、型が持つすべてのストアドプロパティを引数に持つイニシャライザで、上記の例だと、

init(prop1:Int,prop2:String,prop3:String){
    self.prop1=prop1
    self.prop2=prop2
    self.prop3=prop3
}

このようなイニシャライザを定義したのと同じ状態(実際には定義していない)になります。

ということで、sample1を見ると一見エラーが出そうですが、実際エラーは出ずにすべてのプロパティが初期化されている、ということですね。

コメントを残す

メールアドレスが公開されることはありません。