【Swift】参照型と値型について


参照型と値型の違いについて

参照型

参照型とは、インスタンスが値への参照を表す型のことを言います。下記の例では、a、bという空箱のに対して、同じ場所からデータを持ってきて(参照して)います。なので、bのプロパティの値を変更するとaの値も同時に変化していることが分かります。

class StringClass {
    var string =  "何も言いません"
}

let a = StringClass()
print(a.string) // 何も言いません
var b = a

b.string = "こんにちは"
print(b.string) // こんにちは
print(a.string) // 何も言いません

値型

値型とは、インスタンスが値への参照ではなく値そのものを表す型のことを言います。下の例で言うと、インスタンス化する際にc,dという空箱にStringStructがコピーされているイメージです。それぞれのプロパティの値を確認しても、別々のものとして存在していることがわかります。なのでその後の操作や演算等はもとのデータには影響しません。

struct StringStruct {
    var string = "何も言いません"
}

let c = StringStruct()
var d = c

d.string = "こんばんは"
print(c.string) // 何にも言いません
print(d.string) // こんばんは

イメージ(参照型)

プロパティbの値が変更された為、値を参照しているaの値も変更されていることがわかります。

イメージ(値型)

c,dはそれぞれコピーによって作成されたインスタンスなのでc,d同士に依存関係がありません。