2016-10-31 2 views
0

Я пытаюсь получить доступ к значению внутри вложенного объекта. (В основном массив, содержащий объекты, из которых один из объектов содержит объекты в качестве значений)Как получить значение внутри вложенного объекта SWIFT

(result, response, error) -> Void in 
     if let err = error { 
      print("ERROR ---------------------->", err) 
     } else if let tempResult = result as? [NSDictionary] { 

      print(tempResult.count) 

      for details in tempResult { 
       print("----------------->") 
       print(details["details"]!) //works fine 
       print(details["details"]["price"]!) //will not compile 
       } 
} 

Это предупреждение компилятора я получал

print(details["version"]["type"]!) // Type 'Any?' has no subscript members 

Это дерево структура данных я разбираюсь

[ 
{ name: 'Mischief', 
price: 790000, 
link: 'xxxxxxx', 
details: 
     { price: '7390000', web: 'link', info: 'details' } }, 

{ name: 'Ify', 
price: 190000, 
link: 'xxxxxxx', 
details: 
     { price: '690000', web: 'link', info: 'details' } }, 

{ name: 'Connor', 
price: 980000, 
link: 'xxxxxxx', 
details: 
     { price: '120000', web: 'link', info: 'details' } } 
] 
+0

Пожалуйста, включите сообщения об ошибках непосредственно в вопросе, а не в качестве внешних ссылок. Это затрудняет для других, у кого есть подобные проблемы, чтобы извлечь выгоду из этого вопроса. –

+0

@JoeC извините, can not напрямую прикрепить изображения, потому что у меня нет достаточной ** репутации ** –

+0

Кто сказал, что сообщение об ошибке должно было быть в форме изображения? –

ответ

1

Как всегда, пожалуйста, не используйте типы фондов Foundation. Вы выбрасываете информацию о типе. Используйте родные типы Swift, если у вас нет выбора.

Компилятор должен знать тип всех подстрочных объектов, значение details, кажется [String:String]

(result, response, error) -> Void in 
    if let err = error { 
     print("ERROR ---------------------->", err) 
    } else if let tempResult = result as? [[String:Any]] { 

     print(tempResult.count) 

     for anItem in tempResult { 
      print("----------------->") 
      if let details = anItem["details"] as? [String:String] { 
       print(details["price"]!) 
      } 
     } 
    } 
+0

Я пробовал ваше решение, но я получаю это предупреждение от компилятора «Тип» (ключ: строка, значение: Любой) «не имеет элементов подстроки» –

+0

При чем линия? Код связан с Swift 3, если вы используете Swift 2, замените 'Any' на' AnyObject' – vadian

+0

Я использую Swift 3 –

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