【问题标题】:Var set to struct really replaced when modified?var 设置为 struct 修改时真的被替换了吗?
【发布时间】:2016-12-26 07:26:50
【问题描述】:

节日快乐!

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

印刷品--
number 在初始化程序中设置为:123
检测到 didSet 的变化从:123 到 42
检测到的 didSet 变化从:42 到 56

但我没有再看到,“号码已设置...”

【问题讨论】:

    标签: swift swift-structs


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,那是有道理的。我想我只是被“一个不同的实例”这个措辞误导了,这对我来说至少暗示了一个经历了实例化过程的单独实例。
    • @JackyChan:对!
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多