加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 二元运算符’!==’不能应用于两个’MyProtocol’

发布时间:2020-12-14 04:40:00 所属栏目:百科 来源:网络整理
导读:我创建了一个协议: public protocol MyProtocol { func doTask()} 然后,我有一个MyProtocol类型元素的数组: var taskList: [MyProtocol] = [] 调用者可以向taskList添加元素,最终,我得到了一个非空的taskList. 现在,我需要一个可以从taskList中删除元素的
我创建了一个协议:

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}
}

但我收到编译器错误:二进制运算符’!==’无法应用于两个’MyProtocol’

如何摆脱这个错误?

===更新===

感谢@holex,将MyProtocol改为仅限类,它运行正常.但现在我想知道我是否需要MyProtocol不仅仅是类,那么解决方案是什么呢?

解决方法

您正在使用!==正在比较参考文献.您无法使用此运算符直接比较协议,因为MyProtocol可以成为类或结构.由于!==只能比较实例,因此必须明确声明您的协议是一个类.

请将MyProtocol更改为以下内容,以解决您的问题:

protocol MyProtocol: class { // AnyObject can be used here as well
    func doTask()
}

尝试在没有类或AnyObject的情况下完成此操作将无法与您当前的设计一起使用.您可能想要实现另一种比较方法.

另请注意,您可以尝试使用!=,它可能能够完成您想要的完全相同的操作.使用这种方式,您不必声明类或AnyObject.所以检查一下是否适合你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读