一尘不染

快速语言的结构与类

swift

苹果公司的书“结构和类之间最重要的区别之一是,结构在代码中传递时总是被复制,而类是通过引用传递的。”

谁能帮助我了解这意味着什么?在我看来,类和结构似乎是相同的。


阅读 204

收藏
2020-07-07

共1个答案

一尘不染

这是带有的示例class。请注意,更改名称后,如何更新两个变量引用的实例。Bob现在SueBob曾经被引用过的任何地方。

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"

现在,使用a struct可以看到复制了值,并且每个变量都保留了自己的一组值。当我们将名称设置为时,in
SueBob结构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"

因此,对于表示有状态的复杂实体,a
class很棒。但是对于仅是度量值或相关数据位的值,struct则更有意义,因此您可以轻松地对其进行复制和计算,或者修改值而不必担心副作用。

2020-07-07