我已经创建了一个协议:
ObjectResult<T>
然后,我有一个数组,用于存储类型为public protocol MyProtocol {
func doTask()
}
的元素:
MyProtocol
呼叫者可以将元素添加到taskList,最终,我得到一个非空的var taskList: [MyProtocol] = []
。
现在,我需要一个可以从taskList
中删除元素的函数,这就是我尝试的方法:
taskList
但是我收到编译器错误:func removeTask(task: MyProtocol) {
// Compiler error: Binary operator '!==' cannot be applied to two 'MyProtocol'
taskList = taskList.filter{$0 !== task}
}
如何摆脱这个错误?
===更新===
感谢@holex,将Binary operator '!==' cannot be applied to two 'MyProtocol'
更改为仅类之后,它可以正常工作。但是,现在我想知道是否需要MyProtocol
不只限于类,那么解决方案是什么?
答案 0 :(得分:6)
您正在使用!==
来比较参考。您无法使用此运算符直接比较protocol
,因为MyProtocol
可以成为class
或struct
。由于!==
只能比较实例,因此您必须明确声明protocol
是class
。
请将MyProtocol
更改为以下内容,这应该可以解决您的问题:
protocol MyProtocol: class { // AnyObject can be used here as well
func doTask()
}
在没有class
或AnyObject
的情况下尝试执行此操作不适用于您当前的设计。您可能想要实现另一种比较方法。
还请注意,您可以尝试使用!=
来完成完全相同的操作。使用这种方式,您不必声明class
或AnyObject
。因此,请检查是否适合您。