[Swift] classとstructの使い分け

Posted on

classは参照型でstructureは値型

基本的にstructを使える場合はstruct、そうでない時はclassです。 参照型だと、意図しないところで変更を加えられて不具合の原因となり得るので値型のstructureの方が扱いやすいです。

structの使い所

という上記の考えですが、じゃあどういう時にstructが使えるの?という事に関して、Swiftのドキュメントがありました。

The Swift Programming Language (Swift 4.0.3) より(日本語は意訳)

一般的な条件
* 利用目的が単純なデータをカプセル化すること
* インスタンスを使いまわす時に、カプセル化された値が参照されるのではなくコピーされることを期待する場合
* 構造体に格納される全てのプロパティが値型で、参照されるのではなくのではなく、コピーされることを期待する場合
* 構造体は他のタイプからプロパティや挙動を継承するひつようがない

適している例
* 幾何学的的形のサイズ(width,heightプロパティを持っていて、両方Doubleとか)
* シリーズの範囲を参照する方法として(startプロパティとlengthプロパティがあって、両方Int)
* 3Dコーディネートシステムの座標(プロパティ:x,y,z、それぞれDouble)

その他の場合はClassを使う。実際には殆どのカスタムデータ構造はstructではなく、classを使うべき。

結局、違うは参照型であること値型であること、structはclassと違って継承できない。ということが書かれています。
(わかっとるわ。という感じですね)

あげられてるexampleからするに、structを使うところはインスタンスがほぼ不変な型・値のプロパティを持っている場合と理解しました。

structの方が扱いやすいから、classでなくstructをバンバン使う!というのはそのための設計をする必要があって、またそれは別の話なので、それはそれで調べていきたいところです。