Var设置为struct在修改时真的被替换了吗?

时间:2016-12-26 07:26:51

标签: swift swift-structs

节日快乐!

我在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

但我不再看到了,“数字被设定......”

1 个答案:

答案 0 :(得分:0)

替换并不意味着再次调用init

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

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