Swift 3:检查数组中的项目

时间:2017-02-25 23:54:51

标签: arrays swift contains

我想检查一个项目是否存在于数组中:

 protocol Item {
        var name: String! {get set}
        var value: Int! {get set}
    }

class UserList {
    var items: [Item]!

    func checkItem(item: Item) -> Bool{
        if items.contains(where: {$0 === item}) {  // Error
            return true
        }
        return false
    }
}

我收到此错误:

Binary operator '===' cannot be applied to two 'Item' operands

2 个答案:

答案 0 :(得分:1)

如果您真的想为===使用身份识别运算符(checkItem),可以将Item声明为类协议:

protocol Item: class {
    var name: String! {get set}
    var value: Int! {get set}
}

class UserList {
    var items: [Item]!

    func checkItem(item: Item) -> Bool{
        return items.contains {$0 === item}
    }
}

(我不明白为什么你需要隐式解包的Optionals,所以我把它们留在那里。但我自己永远不会使用这么多的IUO。)

但我想知道身份是否是你想要的:

class ClassItem: Item {
    var name: String!
    var value: Int!

    init(_ name: String, _ value: Int) {
        self.name = name
        self.value = value
    }
}
let myList = UserList()
myList.items = [ClassItem("aaa", 1), ClassItem("bbb", 2)]
var result = myList.checkItem(item: ClassItem("aaa", 1))
print(result) //->false

如果结果false不符合您的预期,则需要为Item定义自己的相等,并使用它定义checkItem(item:)。< / p>

答案 1 :(得分:0)

我总是使用这个来自objecitve-c

的简单解决方案
let array = ["a,b"]
if let _ = array.index(of: "b")
{
    //if "b" is in array         
}
else
{
    //if "b" is not in aray
}