快速比较两个任意类型值的最佳方法

时间:2019-02-23 12:32:53

标签: ios swift optional anyobject

我有一个类型为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,我希望它们强制转换为它们所属的类。

1 个答案:

答案 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"-因为我们分配了全新的对象