技術と本について書くブログ

技術と本について書くblog。技術メモなど雑記を書いているblog。

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

参照型

変数自体を保存しているのではなく、その値が入ったアドレスが格納されている。 classは参照型で、クロージャーも参照型である。

class classHoge {
    var p: String = "initial"
}

let a3 = classHoge()
let a4 = a3
a3.p = "aa"
print(a3.p) // aa
print(a4.p) // aa <-参照しているだけ!

参照渡し

値型

値型はその値を構造体として定義しており、その値自体がコピーされる。つまり、アドレスではなく実際の値が保存されている。 値型、structは不変である。structが使えるときはstructを使うべきである。

structは継承ができない。インスタンスが複製される。 これはインスタンスの独立性が担保されやすい。 ミュータブル(変更可能な変数の型)を管理しやすい。

struct structHoge {
    var p: String = "initial"
}

let a1 = structHoge()
var a2 = a1 // <- var
a2.p = "aa"
print(a1.p) // initial
print(a2.p) // aa

参考 https://qiita.com/koher/items/0745415a8b9842563ea7