2017-02-03 2 views
1

Я уже искал и действительно задавал вопрос здесь, было мое последнее прибежище ... честно, , но не стесняйся, чтобы извинить меня, так как «я должен был спросить» ...! сейчас до бизнес ...Тип 'NSObject?' не имеет подстрочных индексов

У меня есть словарь с двумя уровнями «dict> keys», вот и все! но по какой-то причине я не могу получить «три» значения. Где я здесь ошибся?

print(mainDict) 

/* 
["keys": { 
    one = "one..."; 
    two = 2; 
    three = "three"; // need this one! 
}] 
*/ 

let sub = mainDict["keys"] 
print(sub as Any) 

/* 
Optional({ 
    one = "one..."; 
    two = 2; 
    three = "three"; 
}) 
*/ 

Отлично! пока что так хорошо ... но затем:

let keyThree = mainDict["three"] 
print(keyThree as Any) 
// nil 

let keyThree = sub["three"] 
// Type 'NSObject?' has no subscript members 

WTH? ... ПРОБОВАЛИ:

+0

пожалуйста, поделитесь инициализацию словарь –

+0

@AmrElAdawy: 'FUNC makeThisPossible (mainDict: [String: NSObject])' – ctfd

+0

доля кода, где вы установите значения первоначально – Russell

ответ

2

Декларация mainDict в подписи функции должен быть [String :[String:Any]]. Или вы можете объявить его как [String:Any], а затем вам нужно, чтобы бросить к югу, как [String:Any]

Так функция должна быть

func makeItPossible(mainDict : [String:Any]){ 
    if let sub= mainDict["keys"] as [String:Any], let keyThree = sub["three"]{ 
     print(keyThree) 
} 

Обновлено использовать условное связывание.

+2

Я был написан почти так же. ** Вместо развертывания силы используйте условное связывание ** для извлечения значений. –

+0

Привет, Kumar. Предложите обновление для моего ответа в качестве другого кода. Я бы рассмотрел и принял. –

+0

@KumarKL: Учтите, почему нужно использовать условное принудительное? – ctfd

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