var set to struct 修改时真的被替换了吗?
Var set to struct really replaced when modified?
节日快乐!
我在 Neuberg 的 "iOS 10 Programming Fundamentals" 的第 147 页上遇到了困难。他的说法是 "when you apparently mutate an instance of a value type, you are actually replacing that instance with a different instance."
问题:如果这是真的,那为什么我没有看到正在初始化的新实例?
///////////////////// 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
但是我再也看不到了,"number was set..."
替换并不意味着再次调用init
。
它在概念上意味着您正在复制数据,修改(或变异)数据(如修改number
),并用修改后的数据替换原始数据。
我没有读过这本书,但我相信提出这一点是为了明确区分引用类型和值类型。值类型通过复制传递,引用类型通过引用传递(即使用指针)。
节日快乐!
我在 Neuberg 的 "iOS 10 Programming Fundamentals" 的第 147 页上遇到了困难。他的说法是 "when you apparently mutate an instance of a value type, you are actually replacing that instance with a different instance."
问题:如果这是真的,那为什么我没有看到正在初始化的新实例?
///////////////////// 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
但是我再也看不到了,"number was set..."
替换并不意味着再次调用init
。
它在概念上意味着您正在复制数据,修改(或变异)数据(如修改number
),并用修改后的数据替换原始数据。
我没有读过这本书,但我相信提出这一点是为了明确区分引用类型和值类型。值类型通过复制传递,引用类型通过引用传递(即使用指针)。