我该如何在Swift中初始化一个通用的可变数组?

12

我尝试了这个:

var ss: [S] = NSMutableArray<S>(capacity: 0)

编译器报错: 无法为非泛型类型 'NSMutableArray' 进行特化

为什么会出错呢?

1个回答

21

NSArrayNSMutableArray是Objective C类型,不支持泛型。您可以实例化为Swift的本地数组类型:

var settings = [Setting]()

这也可以写成

var settings = Array<Setting>()

感谢类型推断功能,您不必指定类型,但如果您希望,这是完整版本:
var settings: [Setting] = [Setting]()
var settings: Array<Setting> = Array<Setting>()

请注意,[Setting]Array<Setting>是可以互换的,这意味着它们定义了相同的对象类型,因此您可以使用您更喜欢的任何一种。

你知道我怎么样把NSOrderedSet的元素添加到settings吗? - János
1
如果没有错的话,NSOrderedSet 有一个 NSArray 类型的 array 属性。为了利用 Swift 泛型,您需要循环遍历该数组,将每个元素转换为 Setting 并添加到 settings 数组中。 - Antonio
2
我能够使用+=数组通用运算符添加序列。 - János
1
好的,知道了。我不知道这是可能的。谢谢你分享 :) - Antonio
你可以在Objective-C中使用带泛型的NSArray! https://useyourloaf.com/blog/using-objective-c-lightweight-generics/ - Radek Wilczak
这个答案不完整,因为类型 Array 不能替换 NSMutableArray,因为它是不可变的。 - Benny

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