2017-02-09 6 views
0

Я пытаюсь разобрать словарь типа [String: Любой], и я не могу словарей синтаксического анализа в пределах этого словаря, как я хотел бы ожидать:Swift словарь словарей

var monsterDictionary = Dictionary<String, Any>() 

monsterDictionary["stringTest"] = "I'm a string" 
monsterDictionary["numberTest"] = "12345" 
monsterDictionary["arrayTest"] = [1,3,4,"five"] 
monsterDictionary["dictTest"] = ["key for number": 123.2 , "key for string" : "hello"] 
monsterDictionary["foo-values"] = ["foo-type": foo.FooValueType.fooValuePercent, "foo-value": 25] 


for fooItem in (monsterDictionary["foo-values"] as! [String: Any]) 
{ 
    let fooType = fooItem["tip-type"] 

Последнее задание генерирует следующая ошибка: «Тип» (ключ: String, значение: Any) не имеет элементов подстроки ».

+0

Ваша структура данных очень странная. Всегда ли будут содержать эти точные ключи? – Alexander

+0

Нет, это для тестирования различных типов ввода словарей. Только «foo-values» вызывает у меня проблемы. – jglasse

ответ

2

Итерация по Dictionary дает ключевые/значения кортежей.

Если вы на самом деле нужно перебрать все ключи/значений, то вы можете сделать так, как это:

for (key, value) in (monsterDictionary["foo-values"] as! [String: Any]) { 
    print(key, value) 
} 

Если вы просто хотите, чтобы получить значение для tip-type, то вы можете просто сделать это:

let fooValues = (monsterDictionary["foo-values"] as! [String: Any]) 
let fooType = ["tip-type"] as! foo.FooValueType 
+0

Он дает только кортежи, если вы не указали ключ, подумал я. для fooItem в (monsterDictionary [ "Foo-значения"] должны давать: [ "Foo-типа": foo.FooValueType.fooValuePercent, "Foo-значение": 25] в противоположность получая ("foo- значения ", [" foo-type ": foo.FooValueType.fooValuePercent," foo-value ": 25]) Я ошибаюсь? – jglasse

+0

Подписки дают' ["foo-type": foo.FooValueType.fooValuePercent, "foo -value ": 25]', но вы затем повторяете этот результат в цикле for, получая '(" foo-type ", foo.FooValueType.fooValuePercent)' и '(" foo-value ", 25)' tuples – Alexander

+0

Я был смущен Objective C, который я переводил: для (NSDictionary * foo in [MonsterDictionary objectForKey: @ "foo-values"]) { Foo * fooObject = [[Foo alloc] initWithFooType: (FooValueType) [[foo objectForKey: @ "tip-type"] integerValue] Значение: [foo objectForKey: @ "foo-value"]]; – jglasse

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