1

节日快乐!

我在 Neuberg 的“iOS 10 Programming Fundamentals”的第 147 页受到阻碍。他的主张是“当你明显改变一个值类型的实例时,你实际上是在用不同的实例替换那个实例。”

问题:如果这是真的,那么为什么我没有看到正在初始化的新实例?

///////////////////// Slight modification from page 147 in Neuberg, 2016 edition
struct Digit {
    var number : Int
    init(_ n:Int) {
        self.number = n
        print("number was set in the initializer to: \(n)")
    }
}
var d : Digit = Digit(123) {
    didSet {   
        print("didSet detected old: \(oldValue.number) to new: \(d.number)")
    }
}
d.number = 42
d.number = 56

打印
——在初始化程序中将数字设置为:123
检测到的 didSet 变化:123 到 42
检测到的 didSet 变化:42 到 56

但我再也看不到“号码已设置……”

4

1 回答 1

0

更换并不意味着init再次调用。

它在概念上意味着您正在复制数据,修改(或变异)数据(如 modify number),并用修改后的数据替换原始数据。

我没有读过这本书,但我相信提出这一点是为了明确引用类型和值类型之间的区别。值类型通过复制传递,引用类型通过引用传递(即使用指针)。

于 2016-12-26T07:36:36.697 回答