二元运算符 '!==' 不能应用于两个 'MyProtocol'
Binary operator '!==' cannot be applied to two 'MyProtocol'
我创建了一个协议:
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{[=13=] !== task}
}
但是我得到编译器错误:Binary operator '!==' cannot be applied to two 'MyProtocol'
如何摆脱这个错误?
===更新===
感谢@holex,将MyProtocol
改为class-only后,效果很好。但是现在我想知道我是否需要 MyProtocol
而不是 class-only,那么解决方案是什么?
您正在使用 !==
,它正在比较参考。您不能直接使用此运算符比较 protocol
,因为 MyProtocol
可以变成 class
或 struct
。由于 !==
只能比较实例,因此您必须明确声明您的 protocol
是 class
.
请将 MyProtocol
更改为以下内容,这应该可以解决您的问题:
protocol MyProtocol: class { // AnyObject can be used here as well
func doTask()
}
在没有 class
或 AnyObject
的情况下尝试完成此操作将不适用于您当前的设计。您可能想要实施另一种比较方法。
另请注意,您可以尝试使用 !=
,它可能能够完成您想要的完全相同的事情。使用这种方式,您不必声明 class
或 AnyObject
。所以检查一下这是否适合你。
我创建了一个协议:
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{[=13=] !== task}
}
但是我得到编译器错误:Binary operator '!==' cannot be applied to two 'MyProtocol'
如何摆脱这个错误?
===更新===
感谢@holex,将MyProtocol
改为class-only后,效果很好。但是现在我想知道我是否需要 MyProtocol
而不是 class-only,那么解决方案是什么?
您正在使用 !==
,它正在比较参考。您不能直接使用此运算符比较 protocol
,因为 MyProtocol
可以变成 class
或 struct
。由于 !==
只能比较实例,因此您必须明确声明您的 protocol
是 class
.
请将 MyProtocol
更改为以下内容,这应该可以解决您的问题:
protocol MyProtocol: class { // AnyObject can be used here as well
func doTask()
}
在没有 class
或 AnyObject
的情况下尝试完成此操作将不适用于您当前的设计。您可能想要实施另一种比较方法。
另请注意,您可以尝试使用 !=
,它可能能够完成您想要的完全相同的事情。使用这种方式,您不必声明 class
或 AnyObject
。所以检查一下这是否适合你。