Неустранимая ошибка: элемент NSArray не соответствует типу элемента Swift Array
Внезапно я начал получать ошибку во время выполнения, как,
fatal error: NSArray element failed to match the Swift Array Element type
Я объявил мой массив как,
var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()
Теперь в моем блоке успеха ответа сервера,
self.myArray = dicResponse["data"]! as Array
println(self.myArray) // FATAL ERROR HERE
Который работал отлично до обновления до Xcode6 Beta6
FYI : dicResponse["data"]! // is verified as valid
(Извините, что указал неправильное место раньше!)
Решено:
Не знаю, но я сделал некоторые изменения, и это работает,
var myArray = [AnyObject]()
self.myArray = dicResponse["data"]! as [AnyObject]
3 ответа
Если бы я мог дополнить ответ Тиджея дополнительной информацией. Эта ошибка:
fatal error: NSArray element failed to match the Swift Array Element type
вызвано несоответствием типов.
Например, приведение к вашему типу массива Swift:
myPersonList = aDictionary["persons"] as [Person]
Доступ к значению в aDictionary на основе ключа "persons"
Свифт ожидает получить массив типа Person. Это скомпилируется и будет выполнено без проблем.
Однако позже в вашем коде при доступе к myPersonList
Элемент массива, если тип не соответствует указанному - в моем примере Person - выполнение завершится с ошибкой выше.
Итог: вы почти наверняка указали неправильный тип в приведении. Изучите ваш словарный объект, чтобы увидеть, что он действительно содержит.
Если вы работаете с API Какао, вы всегда получаете NSArray
, который не типизирован.
Итак, вам нужно привести этот массив к типизированному массиву Swift.
Вы должны быть в состоянии скомпилировать этот код:
var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()
self.myArray = dicResponse["data"]! as [CUSTOM_CLASS]
Таким образом, каждый элемент массива приводится к CUSTOM_CLASS
объект.
Может ли быть конфликт между быстрым типом и ObjectiveC? Потому что я испытал похожую ситуацию, пытаясь зациклить на [NSMutableDisctionary]
оба с .forEach{}
а также for ... in
кстати, но это дало мне ту же ошибку (NSArray element failed to match the Swift Array Element type
). Когда я изменил тип на [Dictionary<String,Any>]
все работало хорошо. Сейчас, []
был введен в Swift, и типы с префиксом NS...
в ObjectiveC.
TL;DR: также вызвано смешиванием двоичных файлов Xcode 7 и Xcode 7.1.
На этот вопрос уже был дан ответ, но я только что получил эту ошибку в недрах Alamofire для приведения массива действительного значения [String].
В моем случае я использовал carthage и не осознавал, что xcode-select по-прежнему указывал на счастливый код X7 для сбоя. Обновление xcode-select до Xcode 7.1B решило мою проблему.