LoginSignup
0
2

More than 1 year has passed since last update.

Swift言語での値型と参照型

Last updated at Posted at 2021-09-14

値型と参照型について、モヤモヤっとしていたので調べた時の覚書

Classは参照型

参照型は変数にインスタンスの値のメモリ保管場所を収納する。

なので、インスタンスが入った変数vを他の変数zに代入するとzにもインスタンスの値のメモリアドレスが格納される。つまりvとzは同じインスタンスのメモリアドレスを見てるので、どちらかが変更された場合はその片方の値も変更(されたように見える。vの値が変更されたわけではなく、vの参照しているメモリアドレスに格納されている値が変更されている)される。また、let表記でもプロパティの変更はできる(変数のメモリには参照先のアドレスがあるのみで、そのアドレスを変更しているわけではないから)

class A {
    var test:Int = 0
}

let v = A()
v.test = 1
let z = v
z.test = 2  // letだけど変更できる
z = A() // NG!
print(v.test) // 2
print(z.test) // 2

StructやEnumは値型

値型は変数に値そのものを収納する。

なので、変数vとzが見ている先は別のものなので両者はそれぞれ独立している

なので、プロパティを変更するときは、let表記だと変更できない(変数のメモリに値があり、その値を変更しようとしているため)

class A {
    var test:Int = 0
}

let v = A()
v.test = 1
let z = v
z.test = 2
print(v.test) // 1 変更されていない
print(z.test) // 2
0
2
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
0
2