快速比较两个自定义对象

2024-05-05

我在 Swift 中定义了以下协议:

protocol RecordingObserver {
    func aFunc()
}

我必须在某个地方比较实现此协议的两个对象,以检查它们是否相同。我面临的问题是显然 Swift 不允许我们这样做:

func areEqual(a:RecordingObserver,b:RecordingObserver){
    if a === b {
        println("Equal")
    }
}

知道为什么会发生这种情况吗?我怎样才能用另一种方式做到这一点?


=== is the 相同运算符 and 用于测试两个对象引用是否都引用同一个对象实例。可以应用 只为了参考类型(即实例class).

===与“等于”运算符不同==(这是在Equatable协议)。

因此,假设

  • 实际的观察者是一个实例class, and
  • 你的目的是检查是否a and b参考同一实例,

你必须将协议定义为类协议:

protocol RecordingObserver : class {
    // ...
}

Then

func areEqual(a:RecordingObserver,b:RecordingObserver){
    if a === b {
        println("a and b refer to the same object instance")
    }
}

编译(并按预期工作),因为编译器知道a and b是引用类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速比较两个自定义对象 的相关文章

随机推荐