😽

【Swift】クラス(Class)と構造体(Struct)の違いを整理

2023/02/05に公開

概要

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) //スズキ

構造体の場合、

  1. 変数myPerson1を変数myPerson2へコピー
  2. それぞれの変数へ別の値(タナカ、スズキ)を代入
  3. 代入した各値が(myPerson1:タナカ、myPerson2:スズキ)出力される
    となります。

構造体ではmyPerson1をmyPerson2へ代入しても値を共有せず、別々のものとして扱うことになります。
つまり、オブジェクトごとに値を保持しています。

参照型のクラス

クラス
class Person {
    var lastName = "山田"
}

var myPerson1 = Person()
var myPerson2 = myPerson1

myPerson1.lastName = "タナカ"
myPerson2.lastName = "スズキ"

print(myPerson1.lastName) //スズキ
print(myPerson2.lastName) //スズキ

クラスの場合、

  1. 変数myPerson1を変数myPerson2へコピー
  2. それぞれの変数へ別の値(タナカ、スズキ)を代入
  3. myPerson1:スズキ、myPerson2:スズキと同じ値が出力される
    となります。

クラスではmyPerson1をmyPerson2へ代入した時点で値を共有することになります。
つまり、オブジェクトごとに値を保持していないことになります。

まとめ

他にも違いはあるようですが、一旦ここまで
随時追加予定です。

参考

https://qiita.com/Howasuto/items/57acf33b40dbf4604397

Discussion