2016-08-18 3 views
1

я иметь эту функцию для аутентификации игрока и он работал просто отлично до xcode8 бета 6:Невозможно присвоить значение типа '(UIViewController ?, NSError?) -> Void' to type '((UIViewController ?, Error?) -> Void)?'

func authenticateLocalPlayer() 
{ 
    print(#function) 
    // WillSignIn 
    self.delegate?.willSignIn?() 

    // The player authenticates in an asynchronous way, so we need a notification to inform when the authentication was completed successfully 
    // If the local player is already connected, return and notificate 
    if GameKitHelper.sharedGameKitHelper.localPlayer.isAuthenticated { 
     NotificationCenter.default.post(name: NSNotification.Name(rawValue: Constants.LocalPlayerIsAuthenticated), object: nil) 
     return 
    } 

    // Calling the authentication view controller 
    self.localPlayer.authenticateHandler = {(viewController: UIViewController?, error: NSError?) -> Void in 

     self.addLastError(error: error) 

     if (viewController != nil) 
     { 
      self.addAuthenticationViewController(authenticationViewController: viewController!) 
     } 

      // If the localPlayer authenticated successfully notificate 
     else if (self.localPlayer.isAuthenticated == true) 
     { 
      self.gameCenterConnected = true 
      print("Local player ID: \(self.localPlayer.playerID)") 
      print("Local player Alias: \(self.localPlayer.alias)") 
      NotificationCenter.default.post(name: NSNotification.Name(rawValue: Constants.LocalPlayerIsAuthenticated), object: nil) 

     } 
      // If the localPlayer failed to authenticate 
     else 
     { 
      self.gameCenterConnected = false 
     } 

     if (error != nil) 
     { 
      // Handle error here 
     } 
    } 
} 

теперь я получаю эту ошибку «Невозможно присвоить значение типа„(UIViewController ?, NSError?) -> Пустота“ на тип '((UIViewController ?, Error?) -> Void)?' " в этой линии

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

     self.addLastError(error: error) 

     if (viewController != nil) 

и я понятия не имею, что происходит. Может ли кто-нибудь мне помочь?

+0

Если вы не понимаете сообщение об ошибке, я настоятельно рекомендую повторить функцию с помощью завершения кода, чтобы получить правильную подпись. – vadian

+0

У меня оно есть, я просто неправильно прочитал сообщение об ошибке, и я подумал, что это связано с этим https://github.com/apple/swift-evolution/blob/master/proposals/0103-make-noescape -default.md и попытался выяснить, как его решить, когда я увидел, что ответ был очевиден. – i6x86

ответ

2

извините, ответ был так прост, как только пришлось изменить эту строку:

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

к

self.localPlayer.authenticateHandler = {(viewController: UIViewController?, error: Error?) -> Void in 

мой плохой! Прости!