2015-07-06 2 views
0

Я беру данные из api в виде JSON. Я получаю переменную dynamicType Swift.Dictionary<NSObject, Swift.AnyObject> и вызываю эту переменную myDictionary. Когда я запрашиваю print(myDictionary["keyA"]), он возвращает значение (внутренний словарь), связанное с «keyA», но возвращает его как Swift.Optional<Swift.AnyObject>.Swift удалить необязательно из Словаря Словаря

Как установить переменную с внутренним словарем, который не является обязательным? Или как мне получить доступ к значениям внутреннего словаря?

+1

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

+0

Какой тип имеет внутренний словарь? – Qbyte

ответ

2

Все словарные запросы возвращаются как optionsals, потому что используемый ключ может не существовать в словаре, и поэтому в этом случае возвращается nil. Вы можете использовать дополнительный кастинг as? наряду с дополнительным обязательным if let, чтобы убедиться, что значение существует, что она представляет собой словарь, как и ожидалось, и разворачивать его:

if let innerDictionary = myDictionary["keyA"] as? [NSObject: AnyObject] { 
    // if we get here, "keyA" is a valid key in myDictionary and 
    // we got the type right. innerDictionary is now unwrapped and ready 
    // to use. 
} 

[NSObject: AnyObject] Я использовал в качестве innerDictionary типа. Если вы знаете больше об этом, вы можете использовать более конкретный листинг, например as? [String: String], если знаете, что оба ключа и значения имеют тип String. Если вы ошибаетесь, дополнительный приказ вернет nil, и блок не будет введен, потому что необязательное связывание не будет выполнено.

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