gpt4 book ai didi

arrays - swift 3 : Check for item in an array

转载 作者:行者123 更新时间:2023-11-28 06:24:15 25 4
gpt4 key购买 nike

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

 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

最佳答案

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

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

(我不明白为什么你需要隐式解包选项,所以我把它们放在那里。但我自己永远不会使用这么多 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定义你自己的equality并定义你的 checkItem(item:) 用它。

关于arrays - swift 3 : Check for item in an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42463073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com