Я пытаюсь разбить код Game Center на вспомогательный класс в соответствии с многочисленными учебниками на этом веб-сайте и другими.Swift SpriteKit Game Center
Это то, что я в настоящее время в моем GameViewController.swift
func loadGameCenter() {
var localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil) {
self.presentViewController(viewController,
animated: true, completion: nil) //POINT 1
}
else {
println((GKLocalPlayer.localPlayer().authenticated))
}
}
}
В моей MenuScene.swift, который является SKScene, у меня есть этот код.
func saveHighScore(highScore:Int) {
if GKLocalPlayer.localPlayer().authenticated {
var scoreReporter = GKScore(leaderboardIdentifier: leaderboardID)
scoreReporter.value = Int64(highScore)
var scoreArray: [GKScore] = [scoreReporter]
GKScore.reportScores(scoreArray, withCompletionHandler: {(error : NSError!) -> Void in
if error != nil {
println("Error")
}
})
}
}
func showGameCenter() {
var vc = self.view!.window!.rootViewController! //POINT 2
var gc = GKGameCenterViewController()
gc.gameCenterDelegate = self
gc.viewState = GKGameCenterViewControllerState.Leaderboards
vc.presentViewController(gc, animated: true, completion: nil)
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
Теперь я пытался поставить вышеупомянутый код во вспомогательном класс под названием GameCenter.swift, который является подклассом NSObject. Я написал это сразу после имени класса, чтобы сделать упомянутые выше методы доступными в других моих сценариях (в соответствии с учебниками).
class var sharedInstance: GameCenter {
struct Static {
static let instance = GameCenter()
}
return Static.instance
}
class func loadGameCenter() {
GameCenter.sharedInstance.loadGameCenter()
}
class func saveHighScore() {
GameCenter.sharedInstance.saveHighScore(highScore)
}
class func showLeaderboard() {
GameCenter.sharedInstance.showLeaderboard()
}
Проблема, которую я имею что когда я пытаюсь вызвать определенные функции класса из моего MenuScene.swift, например «GameCenter.loadGameCenter()» или «GameCenter.showLeaderboard()», это вызывает у меня вопросы на POINT 1-2.
Другими словами, как мне нужно переписать старый старый код, чтобы он работал в классе NSObject. Я застрял и пытаюсь понять это целую вечность. Благодарим вас за помощь.