Ios swift中的array.contains()是否需要抛出布尔值?
我试图检查数组newGames是否包含类游戏的某个对象。如果是,那么我不会将其添加到数组中。如果没有,我将添加它。我的代码如下:Ios swift中的array.contains()是否需要抛出布尔值?,ios,arrays,swift,computer-science,contains,Ios,Arrays,Swift,Computer Science,Contains,我试图检查数组newGames是否包含类游戏的某个对象。如果是,那么我不会将其添加到数组中。如果没有,我将添加它。我的代码如下: for game in allGames{ if(!newGames.contains(game){ newGames.append(game) } } 其中allGames是一个游戏对象数组 var allGames = [Game(id: "5",
for game in allGames{
if(!newGames.contains(game){
newGames.append(game)
}
}
其中allGames
是一个游戏对象数组
var allGames = [Game(id: "5", title: "Dog", release_date: "1989", publisher: "Nintendo", price: "20", platform: "OS X", category: "Adventure", players: ["A", "B"]), Game(id: "5", title: "Dog", release_date: "1989", publisher: "Nintendo", price: "20", platform: "OS X", category: "Adventure", players: ["A", "B"])]
但是,我得到了一个错误无法将类型“Game”的值转换为预期的参数类型(Game)throws->Bool'
为什么会发生这种情况?我两个都试过了
for game in allGames{
if(!newGames.contains(where: game){
newGames.append(game)
}
}
及
但这两种方法似乎都不能解决错误,反而会增加错误。发生了什么,为什么斯威夫特对方法.contains(游戏)不满意?您的
game
实例的类型可能不符合equalable
或者将符合性添加到该类型的equalable。您必须创建一个equalable类来比较对象
struct Game: Equatable {
let data:Bool
}
static func == (fObj:Game, tObj:Game) -> Bool {
return fObj.data == fObj:data
}
allGames.contains(yourObject)
或按id筛选
allGames.filter { data in data.id == 1 }
使您的游戏符合均衡 看起来您的代码段中缺少/额外的括号 应该是:
for game in allGames {
if !newGames.contains(game) {
newGames.append(game)
}
}
甚至没有人知道什么是allGames。我编辑了这个问题以提供关于allGames的更多信息。这只是一系列游戏类型的游戏,一个叫newGames的家伙从哪里来的?谢谢!我已经使用func==使游戏符合Equatable,但是现在我得到一个错误
无法将类型为“(Bool,())的值转换为预期的条件类型“Bool”
。我错过了一些非常简单的东西吗?@rjc810我已经更新了我的答案,我想你必须使用静态
for game in allGames {
if !newGames.contains(game) {
newGames.append(game)
}
}