2016-12-25 1 views
0

Я пытаюсь использовать Swift 3 с (ObjectMapper) для сопоставления массива players из заданного ответа JSON на объект класса cut, называемый «Player»; но мне трудно его сопоставить.Swift ObjectMapper продолжает возвращаться неоднозначно без дополнительного контекста

// Sample JSON 
{ 
    "_meta": { 
     ... 
    }, 
    "fixtures": [{ 
     ... 
    }], 
    "players": [{ 
     "name": "Smith", 
     "id": "15475-9524", 
    }] 
} 

Однако, я нахожу это трудно, чтобы получить его, чтобы понять, как сделать это правильно карту, как это всегда жалуется, что ему нужно больше контекста.

Я хочу, чтобы мой потребитель JSON доставил мне список игроков, а затем отобразил всех игроков, используя Object Mapper в массив.

Когда я использую

var players : Array<Player> = Mapper<Player>().mapArray(JSONArray: res)

Он жалуется

Type of expression is ambiguous without more context

Мой класс выглядит следующим образом

class Player: NSObject, Mappable { 
    var name: String? 

    required init?(map: Map) { 
     super.init() 
    } 

    // Mappable 
    func mapping(map: Map) { 
     name <- map["name"] 
    } 
} 

Я использую AlamoFire потреблять JSON.

Alamofire.request(url).responseJSON(completionHandler: { 
    response in 

    switch response.result { 

    case .success(let JSON): 

     guard let res = JSON as? [String:Any] else { 
      print ("Can't do this") 
      return 
     } 

     var players : Array<Player> = Mapper<Player>().mapArray(JSONArray: res) 

print (players) 

    break 

    case .failure(let error): 
     print("** Request failed with error: \(error) **") 
     break 
    } 

Я не совсем понимаю, как использовать ObjectMapper для массива, который я хочу извлечь.

Любая помощь на этом будет хорошей.

ответ

1

Я думаю, вы запутываете словарь JSON с массивом игрока.

Попробуйте это:

guard let res = JSON as? [String:Any] else { 
     print ("res:Can't do this") 
     return 
    } 

    guard let json_players = res["players"] as? [[String:Any]] else { 
     print ("json_players:Can't do this") 
     return 
    } 

    var players : Array<Player> = Mapper<Player>().mapArray(JSONArray: json_players) 
+0

Хорошо, будет делать. Я раньше не использовал ObjectMapper и хотел отдать его, поскольку я всегда делал разбор вручную. – zardon

+1

Это работало, большое спасибо; хотя он жаловался на необязательное значение, которое не разворачивается; поэтому изменил его на 'let players: Array = Mapper () .mapArray (JSONArray: json_players)!' – zardon

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