节日快乐!
我在Neuberg的“iOS 10编程基础”第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
Prints--
number在初始化程序中设置为:123
检测到的didSet变化:123到42
检测到的didSet变化:42到56
但我不再看到了,“数字被设定......”
答案 0 :(得分:0)
替换并不意味着再次调用init
。
概念上,它意味着您正在复制数据,修改(或改变)数据(以修改number
),并用修改后的数据替换原始数据。
我没有读过这本书,但我相信这一点已经提出,以明确参考类型和价值类型之间的区别。值类型通过复制传递,引用类型通过引用传递(即使用指针)。