Swift – 整合GameCenter使用排行榜

我正在Swift做一个游戏。 我希望能够使用GameCenter发布用户的分数,从而可以看到我所有用户的分数。 不过,我已经花了一天的时间来弄清楚如何做到这一点,但我还没有find有用的指示。

我对iOS编程,Swift以及关于这个主题的很less的信息都很陌生,都是用Objective-C编写的。

任何人都可以帮助我将GameCenter集成到我的应用程序,以便我可以将用户分数发布到排行榜供人们看?

编辑:我已经在iTunesConnect上创build了GameCenter排行榜。

编辑2:我已经试过以下教程: http : //www.appcoda.com/ios-game-kit-framework/并将其转换为Swift。 我已经转换了这个:

-(void)authenticateLocalPlayer { GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){ if (viewController != nil) { [self presentViewController:viewController animated:YES completion:nil]; } else{ if ([GKLocalPlayer localPlayer].authenticated) { _gameCenterEnabled = YES; // Get the default leaderboard identifier. [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) { if (error != nil) { NSLog(@"%@", [error localizedDescription]); } else{ _leaderboardIdentifier = leaderboardIdentifier; } }]; } else { _gameCenterEnabled = NO; } } }; } 

进入这个:

 func authenticateLocalPlayer() { var localPlayer : GKLocalPlayer! localPlayer.authenticateHandler = {(viewController : MenuViewController!, error : NSError!) -> Void in if viewController != nil { self.presentViewController(viewController, animated: true, completion: nil) } else { if localPlayer.authenticated { self.gameCenterEnabled = true localPlayer.loadDefaultLeaderboardIdentifierWithCompletionHandler({ (leaderboardIdentifier : String!, error : NSError!) -> Void in if error != nil { println(error.localizedDescription) } else { self.leaderboardIdentifier = leaderboardIdentifier } }) } else { self.gameCenterEnabled = false } } } } 

但它在这条线上崩溃:

 localPlayer.authenticateHandler = {(viewController : UIViewController!, error : NSError!) -> Void in 

错误消息是:

致命错误:意外地发现零,而解包一个可选值

我不敢相信这是多么的艰难!

你的具体问题与Game Center无关,因为你有了var localPlayer : GKLocalPlayer!

你声明了一个隐含的解包可选,然后马上使用它。 当您尝试设置localPlayer.authenticateHandler时,后续行中的值为零。

相反,你应该像这样实例化GKLocalPlayer:

 var localPlayer = GKLocalPlayer() 

请注意,Game Center和Swift目前存在问题。 您的代码将工作,但localPlayer.authenticated永远不会被设置为true。 这个问题在这里被跟踪:

http://www.openradar.me/17825348

信用: http : //www.stuarticus.net/blog/2014/7/game-center-authentication-and-swift提交雷达票。

你可以用这个,我在github上创build一个简单的iOS游戏中心类Easy Class Game Center Swift https://github.com/DaRkD0G/Easy-Game-Center-Swift