在下面的 Swift 代码中,对于某些类型 T:HasDefaultValues
,init(variableValue: T)
中的赋值不会发生,成员 variable
取 T.defaultValue
的值:
protocol HasDefaultValues : Equatable {
static var defaultValue: Self {get}
static var alternativeValue: Self {get}
}
class MyClass<T:HasDefaultValues> : NSObject, NSCoding {
var variable: T = T.defaultValue
init(variableValue: T) {
self.variable = variableValue // Executed, but assignment doesn't happen!
super.init()
}
// ... More code follows
}
我已经使用调试器单步执行了代码,并确认 variableValue
的值符合预期,执行通过了 self.variable = variableValue
赋值,但 self.variable
的值不会改变。对于许多其他类型 T:HasDefaultValues
,该代码按预期工作。这可能是编译器错误?
T:HasDefaultValues
类型的代码没有发生赋值是相当复杂的,我没有尝试将事情减少到最小的可重现示例。我在这里问除了编译器错误之外,是否有充分的理由让简单的赋值失败。如果有,这将有助于将事情减少到最小的可重现示例。
提前致谢。
最佳答案
我认为一些代码再次改变了 variable
属性。
请加一个观察者来验证这个“理论”。
var variable: T = T.defaultValue {
didSet(oldValue) {
debugPrint("variable changed from \(oldValue) to \(variable)")
}
}
关于swift - 为什么 Swift 中的赋值不会发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34925308/