Swiftでいこう! - 値型と参照型
値型
単純に変数に値を入れる場合は値型となってそれぞれの変数にそれぞれの値が入って行きます。変数相互に影響はありません。
var a = 5
var b = a // bにaの値を代入
// インスタンスは共有されないため、aの値を変更してもbの値は変わらない。
a = a * 2
print(a) // 10
print(b) // 5
参照型
class MyType {
var int: Int
init(int: Int) {
self.int = int
}
}
let a = MyType(int: 1) // a.int == 1
let b = a // b.int == 1
b.int += 1 // b.int == 2
print(a) // a.int == 2
変数が複数あってその一つげ変更されても変化しないのが値型、変化する、影響があるのが参照型ということです。
struct、enumなどは値型、classは参照型となっています。
値渡しと参照渡し
値渡しと参照渡しの違いを理解するには以下のサイトがわかりやすいです。
ここで書かれているように変数などに値を入れる場合には直接値を書き込む場合と、値がある場所、アドレスを渡していく場合とあります。
直接書き込むのが値渡し、アドレス、場所のみを渡していくのが参照渡しということになります。
その効果はというと、値渡しだと直接値を決めていくので、変数それぞれがそれぞれの値を持っています。ある変数の値を変更しても他の変数には影響ありません。
参照渡しの場合はアドレスを渡しているので、その値を書き換えれば全てのものに影響して、値が変更されるということです。
この記事が気に入ったらサポートをしてみませんか?