web-dev-qa-db-fra.com

fonction rapide renvoyant un tableau

Je suis en train d'apprendre Swift et je peux comprendre comment créer une fonction simple qui prend un tableau et renvoie un tableau. Heres mon code:

 func myArrayFunc(inputArray:Array) -> Array{

 var newArray = inputArray

// do stuff with newArray

 return newArray
 }

L'erreur rouge que je reçois est la suivante: La référence au type générique 'Array "nécessite des arguments dans <>

13
pete

Dans Swift Array est un type générique, vous devez donc spécifier le type array que contient. Par exemple:

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

Si vous voulez que votre fonction soit générique, utilisez:

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

Si vous ne souhaitez pas spécifier le type ou utiliser une fonction générique, utilisez le type Any:

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

Cela dépend de ce que vous voulez faire exactement. Si vous voulez une fonction spécialisée prenant un tableau d'un type spécifique MyType, vous pouvez écrire quelque chose comme:

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

Si vous voulez une fonction de tableau générique, vous devez utiliser des génériques. Cela prendrait un tableau de type générique T et renverrait un tableau de type générique U:

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

}
8
Valentin

merci à tous (surtout Kirsteins). Donc, je viens avec cet exemple qui fonctionne bien et semble logique:

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

var newArray = inputArray

// do stuff with newArray

return newArray
}
0
pete

Une variable Array n'existe pas dans Swift, mais il existe des tableaux d'un certain type. Vous devez donc donner à la fonction un type générique, comme dans:

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

puis appelez-le en instanciant T sur un type spécifique et en passant un tableau de ce type.

0
Renzo