我有一个类型为property value
的{{1}}的类,我已经为这样的值实现了Any
方法
didSet
我的值是didSet {
if oldValue == nil && self.value != nil {
// do something
}
else {
if let val = self.value as? AnyHashable, let oldVal = oldValue as? AnyHashable {
if val != oldVal {
// do something
}
}
}
}
类型,所以我也想验证optional
的大小写。
有没有更好的方法,我不想强制转换为nil
,我希望它们强制转换为它们所属的类。
答案 0 :(得分:0)
好吧,如果您假设此属性不存在,并且仅在始终使用引用类型的情况下,则可以尝试使用AnyObject
而不是Any
并使用===
运算符检查指针是否指向同一对象。
类似这样的东西:
class Test {
var object: AnyObject? {
didSet {
if oldValue === object {
debugPrint("Old object")
} else {
debugPrint("New object")
}
}
}
}
class SomeClass {}
let test = Test()
let s = SomeClass()
test.object = s
test.object = s
test.object = SomeClass()
结果将是:
"New object"
-因为先前的值为nil
"Old object"
-因为我们分配了相同的s
"New object"
-因为我们分配了全新的对象