如何将Swift元组数组转换为NSMutableArray?

9

我有一个包含元组的Swift数组[(String, String)],希望将其转换为NSMutableArray。我尝试过以下方法,但并没有成功:

let myNSMUtableArray = swiftArrayOfTuples as! AnyObject as! NSMutableArray

1
你不能将元组更改为2D数组[[String]]并将其保存为[AnyObject] - Leo Dabus
2个回答

18

由于像TupleStruct之类的Swift类型在Objective-C中没有等价物,因此它们无法被强制转换或引用为AnyObject,而NSArrayNSMutableArray会限制它们的元素类型。

如果您必须从一个包含元组的Swift数组返回NSMutableArray,则可能的替代方法是返回一个由2个元素数组组成的数组:

let itemsTuple = [("Pheonix Down", "Potion"), ("Elixer", "Turbo Ether")]
let itemsArray = itemsTuple.map { [$0.0, $0.1] }
let mutableItems = NSMutableArray(array: itemsArray)

2
NSMutableArray(array: itemsArray) 这就是诀窍。 - Coder ACJHP

3
您试图做的事情有两个问题:
  • Swift数组可以转换为NSArray,但是无法将其转换为NSMutableArray而不进行构造副本
  • Swift元组没有Cocoa对应项,因此您无法将它们或包含它们的Swift集合转换为Cocoa类型。
以下是如何从Swift String对象的数组构造NSMutableArray的方法:
var arr = ["a"]
arr.append("b")
let mutable = (arr as AnyObject as! NSArray).mutableCopy()
mutable.addObject("c")
print(mutable)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接