2016-09-16 2 views
1
Alamofire.request(videosUrl!).responseJSON { response in 
     if response.result.value != nil { 

      let json = response.data 

      do { 

       let readableJSON = try JSONSerialization.jsonObject(with: json!, options: .mutableContainers) as? JSONStandard 

       if let items = readableJSON { 

        for i in 0..<items.count { 

         let item = items[i] <<< ERROR HERE 

         ...REST OF CODE HERE 
        } 
       }  

      } catch { 
       print(error) 
      } 
     } 
    } 

У меня также есть набор typealias:Неоднозначность ссылки на индекс члена в Alamofire

typealias JSONStandard = [String:AnyObject] 

Мой вопрос, почему я получаю «неоднозначной ссылки на индекс члена» ошибка? Все, что я пытаюсь сделать, это получить доступ к правильной части массива.

+0

Я следую пример из [здесь] (https://www.youtube.com/watch?v=FjsxG07haJI) к l эттер приспособлен к моим потребностям, и он работает на него? См. 21:27 для почти полного кода. –

ответ

0

ошибка происходит потому, что метод нижнего индекса Dictionary (который является Вашим JSONStandard) требует:

1) String в качестве ключевого параметра, но прохождение i который имеет Int типа. И в соответствии с примером ваш код основан на вас, вероятно, следует заменить

if let items = readableJSON { 
... 
} 

с

if let tracks = readableJSON["tracks"] as? JSONStandard { 
     if let items = tracks["items"] as? [JSONStandard] { 
      ... 
     } 
} 

В этом случае items становится Array, который использует Int индекс в методе индекса.

2) или потому, что Dictionary также есть коллекция с индексом DictionaryIndex<Key, Value> индекс также может ожидать DictionaryIndex<String, AnyObject>. В вашем случае вы можете заменить

for i in 0..<items.count { 

с

for i in items.indices { 

или даже с

for (_, item) in items { 

Решение вы выбрали, зависит от структуры вашей JSON

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