😽
【Swift】クラス(Class)と構造体(Struct)の違いを整理
概要
PHPばかり触っていて構造体のことがよくわからず、クラスと構造体の違いが?だったので整理しました。
環境
Swift version 5.7.2
クラスと構造体の違い
値型と参照型
構造体は値型、クラスは参照型になります。
以下はplaygroundで検証しました。
値型の構造体
構造体
struct Person {
var lastName = "山田"
}
var myPerson1 = Person()
var myPerson2 = myPerson1
myPerson1.lastName = "タナカ"
myPerson2.lastName = "スズキ"
print(myPerson1.lastName) //タナカ
print(myPerson2.lastName) //スズキ
構造体の場合、
- 変数myPerson1を変数myPerson2へコピー
- それぞれの変数へ別の値(タナカ、スズキ)を代入
- 代入した各値が(myPerson1:タナカ、myPerson2:スズキ)出力される
となります。
構造体ではmyPerson1をmyPerson2へ代入しても値を共有せず、別々のものとして扱うことになります。
つまり、オブジェクトごとに値を保持しています。
参照型のクラス
クラス
class Person {
var lastName = "山田"
}
var myPerson1 = Person()
var myPerson2 = myPerson1
myPerson1.lastName = "タナカ"
myPerson2.lastName = "スズキ"
print(myPerson1.lastName) //スズキ
print(myPerson2.lastName) //スズキ
クラスの場合、
- 変数myPerson1を変数myPerson2へコピー
- それぞれの変数へ別の値(タナカ、スズキ)を代入
- myPerson1:スズキ、myPerson2:スズキと同じ値が出力される
となります。
クラスではmyPerson1をmyPerson2へ代入した時点で値を共有することになります。
つまり、オブジェクトごとに値を保持していないことになります。
まとめ
他にも違いはあるようですが、一旦ここまで
随時追加予定です。
参考
Discussion