Я переношу свой проект iOS на Swift. Я занимаюсь этим классом по классам. Когда я вызываю методы Objective C из Swift, многие типы Objective C преобразуются в их Swift-копии.
В моем случае Objective C NSMutableArray
преобразуется в Swift Array<AnyObject>
. Теперь вот моя проблема. В моем классе Swift я получаю такой массив из объекта Objective C. Теперь, когда я нахожусь в мире Swift, я хотел бы передать этот массив конкретному типу вместо AnyObject
, потому что я точно знаю, какие объекты существуют в этом массиве.
Компилятор не позволит мне это сделать! Позвольте мне упростить мою проблему, сказав, что я хочу передать массив, содержащий строки. Это то, что я пробовал:
var strings = myObjcObject.getStrings() as [String]
Я получаю следующую ошибку от компилятора:
'String' не идентичен "AnyObject"
Я должен согласиться с компилятором, поскольку String действительно не идентичен AnyObject. Но я не понимаю, почему это проблема. Я могу сбрасывать AnyObject в String, если хочу, правильно?
Я также пробовал:
var strings = myObjcObject.getStrings() as? [String]
Кажется, это шаг в правильном направлении, но getStrings() возвращает NSMutableArray
, поэтому я получаю следующую ошибку:
"NSArray" не является подтипом "NSMutableArray"
Есть ли способ сделать то, что я пытаюсь сделать здесь?