我在 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(使用前将#替换为@)