参照型
変数自体を保存しているのではなく、その値が入ったアドレスが格納されている。 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