我有一个叫做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' 的操作数"
我不确定如何解决这个问题,因为两个对象都被定义为遵循 SomeProtocol 协议的 AnyObject 类型,那么问题在哪里呢?
==
做什么?这种在两个任意的SomeProtocol
类型上使用==
的能力从哪里来?你是否定义了一个接受两个SomeProtocol
的==
运算符?你想要引用相等性 (===
而不是==
) 吗? - Airspeed Velocity