如何将NSMutableArray强制转换为特定类型的Swift数组?

我正在将iOS项目迁移到Swift。我正在上课。当我从Swift调用Objective C方法时,很多Objective

C类型都转换为它们的Swift对应类型。

在我的情况下,目标C

NSMutableArray转换为Swift的Array<AnyObject>。现在是我的问题了。在我的Swift类中,我从Objective

C对象获得了这样的数组。现在我处于Swift世界中,我想将此数组强制转换为特定类型,而不是AnyObject,因为我确定知道此数组中存在哪种对象。

编译器不允许我这样做!让我通过说要转换为包含字符串的数组来简化我的问题。这是我尝试的:

var strings = myObjcObject.getStrings() as [String]

我从编译器收到以下错误:

“字符串”与“ AnyObject”不同

我必须同意编译器,因为String确实与AnyObject不同。但是我不明白为什么这是一个问题。如果需要,我可以将AnyObject转换为String,对吗?

我也尝试过:

var strings = myObjcObject.getStrings() as? [String]

这似乎是朝正确方向迈出的一步,但是getStrings()返回,NSMutableArray因此出现以下错误:

“ NSArray”不是“ NSMutableArray”的子类型

有什么办法可以做我想在这里做的事情吗?

回答:

您可以先进行两次向下转换NSArray,然后再进行到[String]

var strings = myObjcObject.getStrings() as NSArray as [String]

在操场上进行了以下测试:

import Foundation

var objCMutableArray = NSMutableArray(array: ["a", "b", "c"])

var swiftArray = objCMutableArray as NSArray as [String]

在更高版本的Swift(至少1.2版)中,编译器会抱怨as [String]。相反,您应该使用if let带有条件下调的as?

import Foundation

var objCMutableArray = NSMutableArray(array: ["a", "b", "c"])

if let swiftArray = objCMutableArray as NSArray as? [String] {

// Use swiftArray here

}

如果您 _ _

确定NSMutableArray可以将其强制转换为[String],则可以as!改用(但在大多数情况下您可能不应该使用):

import Foundation

var objCMutableArray = NSMutableArray(array: ["a", "b", "c"])

var swiftArray = objCMutableArray as NSArray as! [String]

以上是 如何将NSMutableArray强制转换为特定类型的Swift数组? 的全部内容, 来源链接: utcz.com/qa/424987.html

回到顶部