gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:27:27 24 4
gpt4 key购买 nike

我正在将我的 iOS 项目迁移到 Swift。我正在逐课做这门课。当我从 Swift 调用 Objective C 方法时,许多 Objective C 类型都被转换为对应的 Swift。

在我的例子中是一个 Objective C NSMutableArray转换为 Swift 的 Array<AnyObject> .现在我的问题来了。在我的 Swift 类中,我从一个 Objective C 对象中得到了这样一个数组。现在我在 Swift 世界中,我想将此数组转换为特定类型而不是 AnyObject ,因为我很确定这个数组中存在什么样的对象。

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

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

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

'String' is not identical to 'AnyObject'

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

我也试过了:

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

这似乎是朝着正确方向迈出的一步,但 getStrings() 返回 NSMutableArray所以我收到以下错误:

'NSArray' is not a subtype of 'NSMutableArray'

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

最佳答案

您可以通过双重向下转换来完成这项工作,首先是 NSArray,然后是 [String]:

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

在 Playground 测试:

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]

关于ios - 如何将 NSMutableArray 转换为特定类型的 Swift 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com