在 Swift 2 中为 Game Center 保存高分

Saving a highscore for Game Center in Swift 2

我最近在下载 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'

所以我尝试通过添加 scores: before scoreArray 来解决这个问题,如下所示:

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

它给了我以下错误:

调用中参数 'withEligibleChallenges' 缺少参数

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

根据 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! 作为您的完成块参数。