我创建了一个协议(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}
}
但我收到编译器错误:
Binary operator '!==' 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/