``` class Leaderboard {     var id : String     var leaderboard : GKLeaderboard     var loaded      : Bool     init()     {         self.id          = ""         self.leaderboard = GKLeaderboard()         self.loaded      = false     }     init(id: String, leaderboard: GKLeaderboard, loaded: Bool)     {         self.id          = id         self.leaderboard = leaderboard         self.loaded      = loaded     } } class GameCenter {     static let shared = GameCenter()     private var player = GKLocalPlayer.local     private var leaderboards : [Leaderboard] = []     func authenticatePlayer()     {         player.authenticateHandler = { (vc, error) -> Void in             if let error = error             {                 print(error.localizedDescription)             }             else if let vc = vc             {                 if let viewController = UIApplication.shared.windows.first!.rootViewController                 {                     viewController.present(vc, animated: true)                     {                         self.loadLeaderboards()                     }                 }             }             else             {                 self.loadLeaderboards()             }         }     }     func loadLeaderboards()     {         var leaderboardIDs : [String] = []         // Gather all of the leaderboard ids that we have         for leaderboard in GameCenterLeaderboards.allCases         {             leaderboardIDs.append(leaderboard.rawValue)         }         // Load the leaderboard for all of these ids and add to a new array         GKLeaderboard.loadLeaderboards(IDs: leaderboardIDs) { (loadedLeaderboards, error) in             if let error = error             {                 print(error.localizedDescription)                 return             }             if let loadedLeaderboards = loadedLeaderboards             {                 print("\n--- Loaded Leaderboards ---")                 for loadedBoard in loadedLeaderboards                 {                     let board = Leaderboard(id: loadedBoard.baseLeaderboardID, leaderboard: loadedBoard, loaded: true)                     self.leaderboards.append(board)                     print("ID: \(board.id)")                 }                 print("\n")                 self.updatePlayerHighScore()             }         }     }     func playerAuthenticated() -> Bool     {         return player.isAuthenticated     }     func submitScore(id: String)     {         if ( playerAuthenticated() )         {             let leaderboard = getLeaderboard(id: id)             if ( leaderboard.loaded )             {                 print("Submitting score of \(AppSettings.shared.highScore!) for leaderboard \(leaderboard.id)")                 leaderboard.leaderboard.submitScore(AppSettings.shared.highScore, context: -1, player: player) { (error) in                     if let error = error                     {                         print(error.localizedDescription)                     }                     else                     {                         print("Successfully submitted score to leaderboard")                     }                 }             }         }     }     func getLeaderboard(id: String) -> Leaderboard     {         if let leaderboard = leaderboards.first(where: { $0.id == id } )         {             return leaderboard         }                return Leaderboard()     }     func updatePlayerHighScore()     {         let leaderboard = getLeaderboard(id: GameCenterLeaderboards.HighScore.rawValue)         if ( leaderboard.loaded )         {             leaderboard.leaderboard.loadEntries(for: [player], timeScope: .allTime) { (playerEntry, otherEntries, error) in                 if let error = error                 {                     print(error.localizedDescription)                     return                 }                 if let score = playerEntry?.score                 {                     print("Player Score in leaderboard: \(score)")                     if( score > AppSettings.shared.highScore )                     {                         AppSettings.shared.highScore = score                         print("High Score Updated!")                     }                     else                     {                         print("High Score Not Updated!")                     }                 }             }         }     } } ```