2017-01-23 38 views
1

我需要通过引用来传递数组(因为被调用的函数会修改它,并且这些更改应该在调用站点上反映出来)。由于雨燕阵列是由价值和NSArrays过去了,通过参考,我想声明函数为:如何在Swift中声明特定类型的NSArray?

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

但Xcode中说,我不能专注一个非泛型类型的NSMutableArray。所以,我必须做的:

func save(_ photos: NSMutableArray) { 

这失去类型安全。有没有一种方法可以让我们既安全又有价值?

回答

3

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

取而代之,只需声明photosinout [Photo]。您仍然会传递价值,但您可以将修改后的数组写回到任何地方。

简单的例子:

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

嗯......谢谢。我更喜欢NSArray,因为有两个数组,即使是暂时的,也会引发更多问题。如果在外部函数的中间调用的其他函数访问原始数组会发生什么?它不会看到所做的更新。我错过了什么? –