2017-01-23 5 views
1

Ich muss ein Array als Referenz übergeben (weil die aufgerufene Funktion es ändert, und die Änderungen sollten an der Aufrufstelle widergespiegelt werden). Da Swift-Arrays nach Wert und NSArrays, als Referenz übergeben wird, habe ich versucht, die Funktion zu erklären:Wie deklariere ich ein NSArray eines bestimmten Typs in Swift?

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

Aber Xcode sagt, dass ich nicht einen nicht-generischen Typen NSMutableArray spezialisieren kann. Also muss ich folgendes tun:

func save(_ photos: NSMutableArray) { 

Das verliert Typ Sicherheit. Gibt es einen Weg, wie ich sowohl Sicherheit geben als auch Wert übergeben kann?

Antwort

3

Sie können NSMutableArray nicht spezialisieren - nur Objective-C kann das (ironisch, oder?). Das musst du aber nicht wirklich.

Stattdessen einfach photos als inout [Photo] deklarieren. Sie werden immer noch den Wert überschreiten, aber Sie können das modifizierte Array zurückschreiben, wo auch immer es herkommt.

Einfaches Beispiel:

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

Hmm ... Danke. Ich bevorzuge NSArray, weil zwei Arrays, auch temporär, mehr Fragen aufwerfen. Was passiert, wenn eine andere in der Mitte der äußeren Funktion aufgerufene Funktion auf das ursprüngliche Array zugreift? Die Updates werden nicht angezeigt. Alles was ich vermisse? –

Verwandte Themen