在 Swift 2 中为 Game Center 保存高分

Posted

技术标签:

【中文标题】在 Swift 2 中为 Game Center 保存高分【英文标题】:Saving a highscore for Game Center in Swift 2 【发布时间】:2015-06-24 00:50:43 【问题描述】:

我最近在下载 Xcode 7 beta 后迁移到了 swift 2,我发现了 2 个使用 product>clean 修复的错误。我仍然遇到 2 个与 Game Center 相关的错误。下面是我保存高分的代码。 (如果有帮助,此代码存在于两个视图控制器上,但排行榜 id 和分数变量有所不同)

func saveHighscore(score:Int) 

    //check if user is signed in
    if GKLocalPlayer.localPlayer().authenticated 

        var scoreReporter = GKScore(leaderboardIdentifier: "ChineseWeather") //leaderboard id here

        scoreReporter.value = Int64(Score) //score variable here (same as above)

        var scoreArray: [GKScore] = [scoreReporter]

        GKScore.reportScores(scoreArray, withCompletionHandler: (error : NSError!) -> Void in
            if error != nil 
                print("error")
            
        )

    


在以 GKScore 开头的行中,我收到以下错误:

不能使用类型为“([GKScore], withCompletionHandler: (NSError!) -> Void)”的参数列表调用“reportScores”

所以我尝试通过添加分数来解决这个问题:在 scoreArray 之前如下:

GKScore.reportScores(scores: scoreArray, withCompletionHandler: (error : NSError!) -> Void in

它给了我以下错误:

调用中的参数“withEligibleChallenges”缺少参数

非常感谢您的帮助,并提前感谢您

【问题讨论】:

【参考方案1】:

根据prerelease documentation,方法签名改为:

class func reportScores(_ scores: [GKScore],
  withCompletionHandler completionHandler: ((NSError?) -> Void)?)

这与old documentation 不同,后者声明:

class func reportScores(_ scores: [AnyObject]!,
  withCompletionHandler completionHandler: ((NSError!) -> Void)!)

注意对可选 NSError 参数的更改以及使整个处理程序可选。

因此,您必须将代码更改为不使用显式 error: NSError! 作为完成块参数。

【讨论】:

您可以将您的代码从(error : NSError!) -> Void 更改为error -> Void。或者,只需使用简写 $0 语法。 我修复了函数调用,但在我有“if error =!nil”的代码中现在给出了一个错误,因为没有错误声明。如果我尝试错误: NSError 它说它是错误的。

以上是关于在 Swift 2 中为 Game Center 保存高分的主要内容,如果未能解决你的问题,请参考以下文章

将分数发布到 Game Center 排行榜

“没有挑战”消息 Game Center iOS 8

iOS 6 Game Center authenticateHandler取消后无法登录

iOS 6 Game Center authenticateHandler 取消后无法登录

iOS Game Center 将排行榜和成就移动到 2 个游戏的组中

iOS 6 Game Center 在身份验证时崩溃