Swift Array должен содержать только один вид объекта (например, всю строку или весь Int). Объект-C NSArray может содержать множество различных типов объектов (например, некоторые NSStrings и некоторые 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]
массив.
Какова ваша цель использования 'self' в' class func'? –
Я только что редактировал вопрос, спасибо – Caipivara