我正在将我的iOS项目迁移到Swift。我逐个类地进行这个过程。当我从Swift中调用Objective C方法时,许多Objective C类型会转换为它们的Swift对应类型。
在我的情况下,一个Objective C的NSMutableArray
被转换为Swift的Array<AnyObject>
。现在问题来了:在我的Swift类中,我从一个Objective C对象中得到了这样的一个数组。既然我处于Swift世界中,我想把这个数组转换成一个特定类型的数组,而不是AnyObject
,因为我确定这个数组中存在什么类型的对象。
但编译器不允许我这样做!让我通过说我想转换成包含字符串的数组来简化我的问题:
```swift let array = getArray() as! [String] ```var strings = myObjcObject.getStrings() as [String]
编译器显示以下错误:
'String'与'AnyObject'不相同
我同意编译器的说法,因为String确实与AnyObject不同。但我不明白这是什么问题。如果需要,我可以将AnyObject强制转换为String,对吗?
我还尝试了:
var strings = myObjcObject.getStrings() as? [String]
看起来这是朝着正确方向迈出的一步,但是 getStrings() 返回一个 NSMutableArray
,所以我得到以下错误:
'NSArray' 不是 'NSMutableArray' 的一个子类型
有没有办法在这里实现我想要做的事情?
var arrayOfGestureRecognizers: [UIGestureRecognizer] = self.topViewController.view.gestureRecognizers! as NSArray as [UIGestureRecognizer]
谢谢! - Joshua DanceNSArray as! [String]
吗? - Chris Conover