構造体はプロパティもメソッドも定義できる。じゃあ、クラスと何が違うんだ!?
決定的に違うのは、変数を入れるときクラスは参照渡し
で、構造体は値渡し
という点です。
- クラスは、参照渡しなのでアドレスを渡す
- 構造体は、コピーを渡す
その他の違い
· 構造体はクラスとは違って継承ができません。
· クラスのプロパティを宣言する場合は、宣言時に初期化するか、initメソッド内で初期化処理をかかないとエラーが起きる。一方、構造体はプロパティの宣言時に初期化しなくてもエラーは起きません。
· 型のキャストができない
構造体を使うパターン
· 小さくても単純なデータをカプセル化したい場合
· 参照渡しより値渡しがいい場合
· 継承が必要ない場合
構造体を避けた方がいいパターン
· データが大きい
· プロパティが多い
理由としては、以下の2つ
· 構造体は変数にセットする度にコピーされるため、データが大きいと処理時間が遅くなる
· 構造体はスタック領域に確保されるため、データが大きいと溢れる可能性が高くなる
結論としては、APIやDBの取得などは構造体ではなく、クラスで作成した方がよさそう
ちなみに、Swiftでのデータ型は構造体で作成されている
· String
· Array
· Dictionary
· Bool
· Int
· Double
· Float
などなど
なので、これらのものは変数に入れる度にコピーされています。
さいごに
本当は、構造体だけではなく列挙型もメソッドを定義できるのですが、今回は構造体に的をしぼって説明しました。