2017-01-23 39 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,因爲有兩個數組,即使是暫時的,也會引發更多問題。如果在外部函數的中間調用的其他函數訪問原始數組會發生什麼?它不會看到所做的更新。我錯過了什麼? –