让我们从一些代码段开始
struct DigitS {
var number = 42
init(_ n: Int) {
self.number = n
}
mutating func replace() {
self = DigitS(12) // mutating
}
}
class DigitC {
var number = 42
init(_ n: Int) {
self.number = n
}
func replace() {
self = DigitC(12) //#Cannot assign to value: "self" is immutable
}
}
很长一段时间,我对 mutable、modifiable 的含义感到很困惑。到目前为止,这是我的一些理解,如果您能指出它可能存在的所有错误,那就太好了
上述结构类型中的变异函数不会“变异”实例,它会将变量的旧值替换为全新的值
变异意味着:赋值,初始化或变异函数等动作不会修改当前值,而是触发替换
类类型变量的值是不可变的,但您可以修改/更改当前值(这是编译器发出警告的原因,请参阅带 # 的注释)
setter 观察者,只能在类型是值类型时调用,因为 setter 告诉变量是否已被变异/替换(请参见下面的代码)
struct Digit { var number = 12 } var b = Digit() { didSet{ print("number is set") } } b.number = 22 // observer is called class Digit { var number = 12 } var b = Digit() { didSet{ print("number is set") } } b.number = 22 // observer is not called
感谢您的时间和帮助