web-dev-qa-db-de.com

swift-Funktion, die ein Array zurückgibt

Ich lerne Swift und ich kann verstehen, wie man eine einfache Funktion erstellt, die ein Array übernimmt und ein Array zurückgibt. Hier ist mein Code:

 func myArrayFunc(inputArray:Array) -> Array{

 var newArray = inputArray

// do stuff with newArray

 return newArray
 }

Der rote Fehler, den ich bekomme, ist: Verweis auf den generischen Typ 'Array' erfordert Argumente in <>

13
pete

In Swift ist Array ein generischer Typ. Sie müssen also angeben, welcher Typ Array enthält. Zum Beispiel:

func myArrayFunc(inputArray:Array<Int>) -> Array<Int> {}

Wenn Sie möchten, dass Ihre Funktion generisch ist, verwenden Sie:

func myArrayFunc<T>(inputArray:Array<T>) -> Array<T> {}

Wenn Sie keinen Typ angeben möchten oder über eine generische Funktion verfügen, verwenden Sie Any type:

func myArrayFunc(inputArray:Array<Any>) -> Array<Any> {}
30
Kirsteins

Hängt davon ab, was genau Sie tun möchten. Wenn Sie eine spezialisierte Funktion benötigen, die ein Array eines bestimmten Typs MyType verwendet, können Sie Folgendes schreiben:

func myArrayFunc(inputArray: [MyType]) -> [MyType] {
    // do something to inputArray, perhaps copy it?
}

Wenn Sie eine generische Array-Funktion benötigen, müssen Sie Generics verwenden. Dies würde ein Array des generischen Typs T erfordern und ein Array des generischen Typs U zurückgeben:

func myGenericArrayFunc<T, U>(inputArray: [T]) -> [U] {

}
8
Valentin

vielen Dank an alle (besonders Kirsteins). Ich habe mir dieses Beispiel ausgedacht, das gut funktioniert und logisch aussieht:

func myArrayFunc(inputArray:Array<String>) -> Array<String>{

var newArray = inputArray

// do stuff with newArray

return newArray
}
0
pete

In Swift gibt es keine Array, aber es gibt Arrays eines bestimmten Typs. Sie sollten der Funktion also einen generischen Typ zuweisen, wie in:

func myArrayFunc<T>(inputArray:Array<T>) -> Array<T>{  
   // do what you want with the array
}

und rufen Sie es dann auf, indem Sie T für einen bestimmten Typ instantiieren und ein Array dieses Typs übergeben.

0
Renzo