1. ホーム
  2. swift

[解決済み】swift言語におけるstructureとclassの比較

2022-04-15 18:26:18

質問

アップルブックより 構造体とクラスの最も重要な違いの1つは、構造体はコード内で受け渡しされるときに常にコピーされますが、クラスは参照渡しされることです。

どなたか、その意味を理解するのにご協力いただけませんか?私には、クラスと構造体は同じに見えます。

どのように解決するのですか?

以下は class . 名前が変更されると、両方の変数から参照されるインスタンスが更新されることに注意してください。 BobSue は、どこもかしこも Bob が参照されたことがある。

class SomeClass {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var aClass = SomeClass(name: "Bob")
var bClass = aClass // aClass and bClass now reference the same instance!
bClass.name = "Sue"

println(aClass.name) // "Sue"
println(bClass.name) // "Sue"

そして、今度は struct を見ると、値がコピーされ、各変数はそれ自身の値のセットを保持していることがわかります。名前を Sue というように Bob の構造体です。 aStruct は変更されません。

struct SomeStruct {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var aStruct = SomeStruct(name: "Bob")
var bStruct = aStruct // aStruct and bStruct are two structs with the same value!
bStruct.name = "Sue"

println(aStruct.name) // "Bob"
println(bStruct.name) // "Sue"

つまり、ステートフルな複合エンティティを表現するために class はすごいですね。しかし、単に測定値や関連データのビットのような値には struct そうすれば、副作用を心配することなく、簡単にコピーして計算したり、値を変更したりすることができます。