如何在Swift中声明特定类型的NSArray?

时间:2017-01-23 02:11:53

标签: swift generics nsarray pass-by-reference type-safety

我需要通过引用传递一个数组(因为被调用的函数修改它,并且更改应该反映在调用站点)。由于Swift数组是通过值和NSArrays传递的,所以我试图将函数声明为:

func save(_ photos: NSMutableArray<Photo>) {

但是Xcode说我不能专门化非泛型类型的NSMutableArray。所以我必须这样做:

func save(_ photos: NSMutableArray) {

这会失去类型安全性。有没有一种方法可以同时具有类型安全性和传递值?

1 个答案:

答案 0 :(得分:3)

你不能专门化NSMutableArray - 只有Objective-C可以做到这一点(具有讽刺意味,不是吗?)。但是,你真的不需要。

相反,只需将photos声明为inout [Photo]即可。您仍将按值传递,但您可以将修改后的数组写回到它来自的任何位置。

简单示例:

var originalArray = [1,2,3]
func modifyArray(_ array: inout [Int]) {
    array = Array(array.dropFirst())
}
modifyArray(&originalArray)
originalArray // [2,3]