パート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を見ると一見エラーが出そうですが、実際エラーは出ずにすべてのプロパティが初期化されている、ということですね。