我已经创建了一个协议(protocol):
public protocol MyProtocol {
func doTask()
}
然后,我有一个包含 MyProtocol
类型元素的数组:
var taskList: [MyProtocol] = []
调用者可以向taskList添加元素,最终,我得到了一个非空的taskList
。
现在,我需要一个可以从 taskList
中删除元素的函数,这是我尝试过的:
func removeTask(task: MyProtocol) {
// Compiler error: Binary operator '!==' cannot be applied to two 'MyProtocol'
taskList = taskList.filter{$0 !== task}
}
但我得到编译器错误:二元运算符 '!==' cannot be applied to two 'MyProtocol'
如何摆脱这个错误?
===更新===
感谢@holex,将 MyProtocol
更改为仅限类后,它工作正常。但是现在我想知道我是否需要 MyProtocol
不是仅限类的,那么解决方案是什么?
最佳答案
您正在使用比较引用的 !==
。您不能直接使用此运算符比较 protocol
,因为 MyProtocol
可以成为 class
或 struct
。由于 !==
只能比较实例,因此您必须明确声明您的 protocol
是一个 class
。
请将 MyProtocol
更改为以下内容,这应该可以解决您的问题:
protocol MyProtocol: class { // AnyObject can be used here as well
func doTask()
}
在没有 class
或 AnyObject
的情况下尝试完成此操作将不适用于您当前的设计。您可能想要实现另一种比较方法。
另请注意,您可以尝试使用 !=
,它可能能够做您想要的完全相同的事情。使用这种方式,您不必声明 class
或 AnyObject
。因此,请检查这是否适合您。
关于swift - 二元运算符 '!==' 不能应用于两个 'MyProtocol',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53174519/