2015-06-16 2 views
2

Я действительно думал, что это Xcode играет, поскольку я не могу на всю жизнь видеть, что вызывает эту ошибку в довольно простой части кода Swift, но после перезапуска очистки проекта, перезагрузки Xcode, и перезагрузка моего MacBook, я все еще получаю ту же ошибку ... Но почему !! ?? !!Извлечение значений из NSDictionary в отдельные переменные

Вот код

// Loop through records saving them 
for recordItem in records { 
    if let record: NSDictionary = recordItem as? NSDictionary {     
     let time: String = record["time"] as! String 
     let record: String = record["record"] as! String 
     let recordId: String = record["record_id"] as! String 
     let saveTime: String = record["save_time"] as! String 
     let setId: String = record["set_id"] as! String 

     // Does more stuff 
    } 
} 

записи является NSArray и он сделан из данных, загруженных с удаленного сервера.

Все в порядке, пока линия начала не запустит recordId. Это и две строки ниже этого дают ошибку. Нельзя индексировать значение типа «String» с индексом типа «String»

Почему? И почему нет проблем с двумя строками выше? И как мне это исправить?

Любая помощь очень ценится, поскольку я нахожусь в тупике.

+1

«let record: String» и «let record: NSDictionary» должны быть разными. –

ответ

7

Вы используете переменную record разворачивать дополнительный recordItem но вы переназначения record, как record["record"] - так что с этого момента он становится строкой, а не словарь - в результате в сообщении об ошибке Не может индексировать значение типа «String» с индексом типа «String»

Вам просто нужно изменить одну из переменных record

for recordItem in records { 
    if let unwrappedRecord: NSDictionary = recordItem as? NSDictionary { 
     let time: String = unwrappedRecord["time"] as! String 
     let record: String = unwrappedRecord["record"] as! String 
     let recordId: String = unwrappedRecord["record_id"] as! String 
     let saveTime: String = unwrappedRecord["save_time"] as! String 
     let setId: String = unwrappedRecord["set_id"] as! String 

     // Does more stuff 
    } 
} 
+0

Правильно. :-) –

+0

Как глупо со мной! Я не знаю, как я этого не видел! Большое спасибо – 365SplendidSuns

1

проблема здесь, вы объявляете record как String, ранее это было NSDictionary и из-за объема record в record["record_id"] является String не NSDictionary. Быстрое исправление заключается в том, чтобы изменить название, как я сделал

let time: String = record["time"] as! String 
    let record1: String = record["record"] as! String 
    let recordId: String = record["record_id"] as! String 
    let saveTime: String = record["save_time"] as! String 
    let setId: String = record["set_id"] as! String 
+0

Нет, это было через 4 минуты после моего – Paulw11

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