在 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 保存高分的主要内容,如果未能解决你的问题,请参考以下文章
iOS 6 Game Center authenticateHandler取消后无法登录
iOS 6 Game Center authenticateHandler 取消后无法登录