1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Swiftの2種類のデータ型(参照型、値型)

Posted at

参照型 (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 には影響しない。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?