【发布时间】:2015-07-02 10:49:05
【问题描述】:
我有一个名为SomeProtocol的协议
我想创建一个函数来获取一个确认此协议的对象,并将其添加到数组中。
然后我有另一个函数从这个数组中删除一个对象。
var allObjs = [SomeProtocol]()
func addObj<T: AnyObject where T: SomeProtocol>(obj: T) {
allObjs.append(obj)
}
func removeObj<T: AnyObject where T: SomeProtocol>(obj: T) {
for someObj in allObjs {
if someObj == obj { // compile time error -> Binary operator '==' cannot be applied to operands of type 'SomeProtocol' and 'T'
}
}
}
此代码将导致编译时错误“二进制运算符'=='不能应用于'SomeProtocol'和'T'类型的操作数”
不确定我该如何解决这个问题,两个对象都定义为 AnyObject 并确认了 SomeProtocol 协议,那么这里有什么问题?
【问题讨论】:
-
要问自己的问题:您希望
==做什么?这种在两个任意SomeProtocol类型上使用==的能力从何而来?您是否定义了一个带有两个SomeProtocol的==运算符?你想要reference 相等(===而不是==)吗? -
是的,我想要一个引用相等来检查这是否是同一个对象,但是 === 也不起作用
-
Comparing two custom objects in swift 和 this answer 的可能重复项应该可以解决您的问题。