来自苹果书

谁能帮我理解这意味着什么?在我看来,类和 struct 似乎是一样的.

推荐答案

下面是一个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更有意义,这样您就可以轻松地复制它们,并使用它们进行计算或修改值,而无需担心副作用.

Swift相关问答推荐

纹理资源加载问题(图像解码失败)

体积单位从夸脱转换为杯似乎关闭了

当TextField变为空时,不会触发onChange

声明一个协议时使用和不使用任何单词有什么区别?

TimeZone 背后的目的

物理主体未与 spritekit Swift 的网格图案上的纹理图像对齐

在Swift中如何将NSUrl转换为本地路径URL

SwiftUI .task 视图修改器:运行在哪个线程中?

URL appendPathComponent(_:) 已弃用?

我怎样才能缩短(提高效率)这段代码?

是否可以使用 .task 修饰符更新基于两个值的视图

deinitialize() 与 deallocate()

将 struct 作为泛型类型传递并访问该泛型类型属性

如何使用 Swinject 注册符合 ObservableObject 的协议?

无法增加系统镜像的大小

如何在 Swift 中将对象归零

调整文本的字体大小以适应 UIButton

CMutablePointer - 如何访问它?

Swift:创建 UIImage 数组

ld:入口点(_main)未定义.对于架构 x86_64:Xcode 9