参照型 (class) と 値型 (struct, enum) の違い
Swift には 2種類のデータ型 があります。
参照型 (class) | 値型 (struct, enum) | |
---|---|---|
メモリ管理 | ヒープ領域に保存され、参照カウント(ARC)で管理される | スタックに保存され、コピーが作られる |
代入 (=) の動作 | 参照を渡す(同じインスタンスを指す) | コピーを作成する |
可変性 | var でも let でもプロパティの変更が可能 | let で作成するとプロパティの変更が不可 |
weak 参照が可能か? | weak 参照が可能 | weak 参照は使えない |
参照型 (class) の例
class User {
var name: String
init(name: String) {
self.name = name
}
}
var user1 = User(name: "Alice")
var user2 = user1 // 同じインスタンスを参照
user2.name = "Bob"
print(user1.name) // → "Bob"(user1 も影響を受ける)
→ user1 と user2 は 同じオブジェクトを参照している ため、一方を変更するともう一方も変わる。
値型 (struct) の例
struct User {
var name: String
}
var user1 = User(name: "Alice")
var user2 = user1 // 新しいコピーが作成される
user2.name = "Bob"
print(user1.name) // → "Alice"(user1 には影響しない)
→ user1 と user2 は 異なるコピー なので、user2 を変更しても user1 には影響しない。