2016-07-08 5 views
0

Когда я пытаюсь скомпилировать этот код:Невозможно преобразовать значение типа '[AnyObject] ожидаемый тип аргумента' [Строка]

func lookupPlayers() { 
    print("Looking up \(match?.players.count)") 

    // Loading ID from players connected in the match 
    var idsArray = NSMutableArray() 
    if (match != nil) { 
     for players in match!.players { 
      if let player = players as? GKPlayer { 
       idsArray.addObject(player.playerID!) 
      } 
     } 

    } 

    GKPlayer.loadPlayersForIdentifiers(idsArray as [AnyObject] as [AnyObject], withCompletionHandler: { (players, error) -> Void in 
     if (error != nil) { 
      // Handle error here 
      // if we fail to retrieve player info return and end the match 
      print("Error retrieving player info: \(error.localizedDescription)") 
      self.matchStarted = false 
      self.delegate?.matchEnded?() 
     } 
     else { 
      // Get info from all players and start the match 
      self.playersDict = NSMutableDictionary(capacity: players.count) 
      for player1 in players { 
       if let player = player1 as? GKPlayer { 
        print("Found player: \(player.alias)") 
        self.playersDict.setObject(player, forKey: player.playerID) 
       } 
      } 
      self.playersDict.setObject(self.localPlayer, forKey: self.localPlayer.playerID) 

      self.matchStarted = true 
      self.delegate?.matchStarted?() 
     } 
    }) 
} 

Я получаю эту ошибку:

Cannot convert value of type '[AnyObject]' to expected argument type '[String]' in this line:

GKPlayer.loadPlayersForIdentifiers(idsArray as [AnyObject] as [AnyObject], withCompletionHandler: { (players, error) -> Void in 

Что я делаю неправильно?

+0

Прежде всего ошибка говорит о том, что '[AnyObject]' должен быть '[String]'. Во-вторых, почему существует 'как [AnyObject] как [AnyObject]'. Я думаю, что второй 'as [AnyObject]' бесполезен. Это было бы похоже на то, что мы рассматриваем этот объект как автомобиль, который рассматривается как автомобиль. Не имеет смысла. Вы пробовали просто заменить '[AnyObject]' на '[String]' и удалить дубликат в этой строке? – Lawrence413

ответ

0

Попробуйте следующее:

  1. Заменить var idsArray = NSMutableArray() с var idsArray = [String](). Таким образом, вы используете массивы Swift, а не Obj-C NSArray.

  2. Затем замените:

GKPlayer.loadPlayersForIdentifiers(idsArray as [AnyObject] as [AnyObject], withCompletionHandler: { (players, error) -> Void in if (error != nil) {

С:

GKPlayer.loadPlayersForIdentifiers(idsArray as [String], withCompletionHandler: { (players, error) -> Void in if (error != nil) {

0

Очень похоже на этот вопрос: Problems with code when updating to Swift 2.0. “Cannot convert value..”

A вы знаете, вам нужно пройти [String] для первого параметра loadPlayersForIdentifiers(_:withCompletionHandler:). А также playerId! определенно является String. Зачем вам NSMutableArray зная это?

Изменение декларирование idsArray как:

var idsArray: [String] = [] 

И линия вызывает ошибку:

GKPlayer.loadPlayersForIdentifiers(idsArray, withCompletionHandler: { (players, error) -> Void in 
0

Try объявить IdArray, как Array<String>() вместо NSMutableArray().

Как это:

// Loading ID from players connected in the match 
    var idsArray = Array<String>() 
    if (match != nil) { 
     for players in match!.players { 
      if let player = players as? GKPlayer { 
       idsArray.append(player.playerID!) 
      } 
     } 

    } 

    GKPlayer.loadPlayersForIdentifiers(idsArray, withCompletionHandler: { (players, error) -> Void in 
     if (error != nil) { 
      // Handle error here 
     ... 
} 
    }) 
Смежные вопросы

 Смежные вопросы