Неустранимая ошибка: элемент 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 решило мою проблему.

Другие вопросы по тегам