swift 中的数组 .contains() 期待抛出的布尔值?

array .contains() in swift expecting a thrown bool?

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

for game in allGames{
            if(!newGames.contains(game){
                newGames.append(game)
            }
        }

其中 allGames 是对象 Game

的数组
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"])]

但是,我遇到了错误 Cannot convert value of type 'Game' to expected argument type '(Game) throws -> Bool'

为什么会这样?我都试过了

for game in allGames{
            if(!newGames.contains(where: game){
                newGames.append(game)
            }
        }

for game in allGames{
            if(!newGames.contains(game throws -> Bool){
                newGames.append(game)
            }
        }

但似乎都无法解决错误,反而只会增加错误。这是怎么回事,为什么 swift 对 .contains(game) 方法不满意?

您的 game 实例的类型可能不符合 equatable。

为该类型添加一个符合 equatable 的规则。

你必须创建一个 Equatable class 来比较对象

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 }

让您的游戏符合 Equatable.

您的代码段中似​​乎有 missing/extra 括号

应该是:

for game in allGames {
    if !newGames.contains(game) {
        newGames.append(game)
    }
}