Swiftにおける構造体とクラスの違い
- 構造体・・・呼び出しや代入の際に実体がコピーされる。 propertyもmethodも書ける。
- クラス・・・複数の箇所から同じ実体を参照できる。
Initializer
- default initializer・・・プロパティに初期値を設定している場合、引数無しでインスタンス生成を行える。
- memberwise initializer・・・各プロパティに初期値を設定していない場合、引数としてすべてのメンバーを渡して初期化する。
初期値なし
|
struct Time { var hour:Int var minute:Int var second:Int } var t = Time(hour: 0, minute: 0, second: 0) // var t = Time() だとエラー |
初期値あり
|
struct Time { var hour = 0 var minute = 0 var second = 0 } var t1 = Time() var t2 = Time(hour: 0, minute: 0, second: 0) |
初期値ありなしが混在
|
struct Time { var hour = 0 var minute = 0 var seconD:Int } var t = Time(hour: 0, minute: 0, second: 0) // var t = Time() だとエラー |
独自Initializerを定義する
init
というメソッドを用意することで、構造体独自の初期化処理を書くことができる。
|
struct Time { var hour:Int var minute:Int var second:Int init(){ self.hour = 0 self.minute = 0 self.second = 0 } } |
init
メソッドをオーバーロードすることもできる。
|
struct Time { var hour:Int var minute:Int var second:Int init(){ self.hour = 0 self.minute = 0 self.second = 0 } init(hour:Int,minute:Int){ self.hour = hour self.minute = minute second = 0 } } |
ネストした構造体
特定の構造体の中でしか使用しない構造体は、構造体のネスト構造体として定義することができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
struct Time { struct Localize { var country:String var hour:Double } var hour:Int var minute:Int var second:Int var local:Localize init(){ self.hour = 0 self.minute = 0 self.second = 0 self.local = Localize(country: "GMT", hour: 0.0) } init(hour:Int,minute:Int){ self.hour = hour self.minute = minute second = 0 self.local = Localize(country: "GMT", hour: 0.0) } } |
関連