下面是一个class
的例子.请注意,当名称更改时,两个变量引用的实例将如何更新.Bob
现在是Sue
,这是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
时,aStruct
中的Bob
struct 不会改变.
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
更有意义,这样您就可以轻松地复制它们,并使用它们进行计算或修改值,而无需担心副作用.