Swift:为什么我不能使用“contains(:)”?

Eru*_*ang 3 swift swift2

步骤 1:\n我声明了一个协议,名为ARDevice

\n\n
protocol ARDevice {\n    var deviceName:String{get}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤2:\n然后我用它来扩展NSNetService\xef\xbc\x9a

\n\n
extension NSNetService:ARDevice{\n    var deviceName:String{\n       get{\n           return self.name\n       }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

第三步:我创建了一个数组:

\n\n
var deviceList = [ARDevice]()\n
Run Code Online (Sandbox Code Playgroud)\n\n

第 4 步:我想在回调方法中使用contains(:),但不能:\n在此输入图像描述

\n\n

我该怎么做?\n我必须实施任何协议吗?

\n

Mar*_*n R 5

 if !deviceList.contains(service) { }\n
Run Code Online (Sandbox Code Playgroud)\n\n

deviceList仅当\ncase \xe2\x80\x93 中数组 \ xe2\x80\x93的元素ARDevice符合Equatable协议时才能使用。特别是,==必须为它们定义\n运算符。

\n\n

这里最简单的解决方案是使用“基于谓词”的contains()方法:

\n\n
if  !deviceList.contains ({ $0.deviceName == service.deviceName }) {\n    deviceList.append(service)\n}\n
Run Code Online (Sandbox Code Playgroud)\n