实例成员 'playerID' 不能用于类型 'GKPlayer'

Instance member 'playerID' cannot be used on type 'GKPlayer'

我开始在我的 iOS 应用程序中实现 Game Center,我想在应用程序的其他地方使用玩家 ID 作为我的唯一标识符。但是,当我尝试声明一个变量时:

var playerID: String? { GKPlayer.playerID }

我收到错误 Instance member 'playerID' cannot be used on type 'GKPlayer'. 查看 Game Center 文档我没有找到任何可以帮助我的东西(但很可能是我,而不是文档)。在声明 playerID 之前是否需要执行一些代码?这一切都是在我验证本地播放器之后完成的,fwiw。

我是否需要使用 loadPlayers(forIdentifiers:withCompletionHandler:) 来获取单个本地用户的 ID?

您需要先获取播放器对象,然后您可以为每个对象查找playerID。 loadPlayers 不会有帮助,因为您必须在调用 loadPlayers 时已经知道所需的播放器 ID。

有两个地方可以获取玩家对象。首先,"local player" 已登录到设备上的 Game Center。其次,实时和回合制比赛都包含当时参加该比赛的所有玩家的列表。

我不知道 swift 语法,但在 obj-c 中,获取本地播放器的 ID 如下所示:

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
NSString *playerID = localPlayer.playerID

比赛对象将包含该场比赛中所有球员的对象数组。在一个实时的 GKMatch 对象中,属性 被称为 players。在回合制 GKTurnBasedMatch 对象中,属性 称为 participants。例如,获取回合制比赛的参与者列表如下:

for (GKTurnBasedMatchParticipant *participant in match.participants)
{
     GKPlayer *player = participant.player;
     NSString *playerID = player.playerID;
}

请注意,在回合制比赛中,当您为 6 名玩家创建比赛时,创建者(本地玩家)占据第一个位置。参与者 2-6 将是空的,直到这些玩家真正加入游戏(在他们的第一轮)。

获得 playerID 后,您可以将其用作其余代码中的标识符。之后,如果你想查询某个玩家的详细信息,你可以使用你想查询的玩家ID调用loadPlayers