Подтвердить что ты не робот

Фатальная ошибка: элемент 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]
4b9b3361

Ответ 1

Если бы я мог дополнить Teejay ответ дополнительной информацией. Эта ошибка:

fatal error: NSArray element failed to match the Swift Array Element type

вызвано несоответствием типа.

Например, при нажатии на ваш тип массива Swift:

    myPersonList = aDictionary["persons"] as [Person]

Доступ к значению в aDictionary на основе ключа "persons", Swift ожидает получить массив типа Person. Это скомпилируется и будет выполняться без проблем.

Однако позже в вашем коде при доступе к элементу массива myPersonList, если тип не указан, - в моем примере Лицо - тогда выполнение будет сбой с ошибкой выше.

В нижней строке: вы почти наверняка указали неправильный тип в роли. Изучите свой словарь, чтобы увидеть, что он действительно содержит.

Ответ 2

Если вы работаете с API Cocoa, вы всегда получаете NSArray, который характеризуется не.

Итак, вам нужно передать этот массив в типичный Swift Array.

Вы должны скомпилировать этот код:

var myArray : [CUSTOM_CLASS] = [CUSTOM_CLASS]()

self.myArray = dicResponse["data"]! as [CUSTOM_CLASS]

Таким образом, каждый элемент массива передается в объект CUSTOM_CLASS.

Ответ 3

TL; DR: также вызвано смешиванием двоичных файлов Xcode 7 и Xcode 7.1.

Об этом уже был дан ответ, но я получил эту ошибку в недрах Alamofire для массива, содержащего действительную строку [String].

В моем случае я использовал carthage и не понял, что xcode-select все еще указывает на счастливый Xcode 7. Обновление xcode-select для Xcode 7.1B исправило мою проблему.