Swift Array должен содержать все объекты одного типа (например, все String или все Int). Объект NSArray Objective-C может содержать множество различных типов объектов (например, некоторые NSString и некоторые NSNumbers). Следовательно, если вы получите такой массив из Objective-C, вы не сможете волшебным образом присвоить его ссылке на массив Swift.
Что я делаю в этой ситуации, так это искажаю массив, чтобы сделать его приемлемым для Swift. Я не знаю, каковы подробности того, что вы получаете от Objective-C; ваша фактическая стратегия будет зависеть от этих деталей и того, что вы хотите сделать с массивом. Один из подходов заключается в назначении/приведении в массив Swift AnyObject. Или вы можете оставить его как NSArray и работать с ним полностью через методы NSArray.
Вот пример из моего собственного кода. arr
— это NSArray, представляющий собой смесь объектов NSString и NSNull. Я знаю, что ни один из объектов NSString не является пустой строкой, поэтому я заменяю пустой строкой все объекты NSNull, таким образом получая массив только строк, с которыми может работать Swift:
let arr2 = (arr as Array).map { $0 as? String ?? "" }
Теперь arr2
— это чистый массив Swift [String]
.
person
matt
schedule
09.12.2014
self
вclass func
? - person A-Live   schedule 09.12.2014