Ios swift中的array.contains()是否需要抛出布尔值?

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",

我试图检查数组newGames是否包含类游戏的某个对象。如果是,那么我不会将其添加到数组中。如果没有,我将添加它。我的代码如下:

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