将NSArray转换为NSMutableArray Swift

9

我想将self.assetsNSArray转换为NSMutableArray并添加到picker.selectedAssets,它是一个NSMutableArray。在Swift中,这段代码会是什么样子呢?

Objective-C 代码:

picker.selectedAssets = [NSMutableArray arrayWithArray:self.assets];

没有查看文档的情况下,我想NSMutableArray(self.assets)和/或NSMutableArray.arrayWithArray(self.assets)应该可以实现。 - Kevin
2个回答

29

在 Swift 5 中,NSMutableArray 继承了 NSArray 的初始化方法 init(array:)init(array:) 的声明如下:

convenience init(array anArray: NSArray)

通过将给定数组中的对象放置在其中,初始化新分配的数组。


以下Playground示例代码展示了如何从NSArray实例创建NSMutableArray实例:

import Foundation

let nsArray = [12, 14, 16] as NSArray
let nsMutableArray = NSMutableArray(array: nsArray)
nsMutableArray.add(20)
print(nsMutableArray)

/*
prints:
(
    12,
    14,
    16,
    20
)
*/

1
imagePicker.selectedAssets = NSMutableArray(array: self.assets!) 返回:致命错误:在解包可选值时意外发现了nil - Peter Pik
通过阅读您的评论,我猜测 self.assets 实际上是 NSArray? 类型。如果是这样,您应该在将其分配给 NSMutableArray 之前执行可选绑定。 - Imanou Petit
可选绑定是什么意思? - Peter Pik
请查看这里,然后尝试以下代码:if assets = self.assets {picker.selectedAssets = NSMutableArray(array: assets)} - Imanou Petit
这行代码真是太美了,“let nsMutableArray = NSMutableArray(array: nsArray)”,简单而有效;感谢您的回答。 - Taoufik

3
你可以用 Swift 实现相同的功能,只需要稍微修改一下语法:
var arr = NSArray()
var mutableArr = NSMutableArray(array: arr)

应该是 let arr 吗? - mc01
它也可以是let。由于这两个数组仅在代码片段中初始化,因此它们都可以使用let。这取决于您之后如何使用它们。 - Connor

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