web-dev-qa-db-fra.com

Swift 3 premiers noms de paramètres

Dans Swift 2, il apparaît que le premier nom de paramètre n'est pas toujours requis lors de l'appel d'une fonction. Maintenant, dans Swift 3, le premier nom de paramètre est requis pour appeler la fonction. Par exemple:

func frobnicate(runcible: String) { 
    print("Frobnicate: \(runcible)") 
}

Swift 2.2 permettait à la fonction d'être appelée simplement en tapant: 

Frobnicate("Station")

Swift 3 semble exiger que nous utilisions les premiers noms de paramètres de méthodes telles que:

Frobnicate(runcible:"Station")

Est-ce le cas avec Swift 3 pour toutes les fonctions et méthodes ou juste pour certaines situations?

17
Cosmic Arrows

Oui c'est bien cela. Swift corrige une incohérence linguistique de cette façon (cela a toujours été nécessaire pour les initialiseurs).

Si vous ne souhaitez pas utiliser le nom du paramètre externe, supprimez-le simplement explicitement:

func frobnicate(_ runcible: String) { 
    print("Frobnicate: \(runcible)") 
}

Vous pouvez lire la justification complète dans Swift Evolution 0046

31
Sulthan

Vous pouvez lire Le langage de programmation Swift (Swift 3) dans i-Book. Vous pouvez également vérifier cela dans WWDC 2016: Nouveautés de Swift

Dans Swift 3, par défaut, les fonctions utilisent leurs noms de paramètres comme étiquettes pour leurs arguments. Écrivez une étiquette d'argument personnalisée avant le nom du paramètre ou écrivez _ pour ne pas utiliser d'étiquette d'argument.

fun greet(_ person: String, on day: String) -> String {
    return "Hello \(person), today is \(day)."
}
greet("John", on: "Wednesday")

ou

// This also works with Swift 2
fun addThreeNumber(_ first: Int, _ second: Int, _ third: Int) {
    print(first+second+third)
}
addThreeNumber(1, 2, 3)
16
Willjay

Exactement. Dans Swift 3.0, il est obligatoire d'écrire des noms de paramètres pour tous les paramètres (y compris le premier paramètre). Le paramètre nom est celui qui est utilisé dans le corps d'implémentation de la fonction.

func frobnicate(runcible: String) { 
    print("Frobnicate: \(runcible)") 
}

Par défaut, l'étiquette de paramètre externe est identique au nom du paramètre, si vous ne spécifiez aucune étiquette de paramètre de manière explicite. Le paramètre label est celui qui est utilisé pour passer les arguments lors de l'appel de la fonction. Si vous avez besoin, pour plus de clarté, vous pouvez également spécifier explicitement les étiquettes de paramètres externes. Exemple ci-dessous

func frobnicate(runcibleExternalLabel runcible: String) { 
    print("Frobnicate: \(runcible)") 
}

Si vous souhaitez ignorer l'étiquette de paramètre externe lors de l'appel de la fonction, ajoutez simplement "_" avant le nom du paramètre. 

func frobnicate(_ runcible: String) { 
    print("Frobnicate: \(runcible)") 
}
9

Oui, Swift 3 exige que vous envoyiez la première étiquette de paramètre.

Veuillez vous référer à Swift 3 changes

2
onkar

La raison pour laquelle vous voulez des étiquettes pour les paramètres est qu’un autre code peut fournir des paramètres dans n’importe quel ordre. 

Sans étiquettes, lorsque vous appelez la fonction, les paramètres sont anonymes et vous ne pouvez pas être certain que vous les avez fournis dans le mauvais ordre. 

Placez les étiquettes devant les paramètres et les outils de code peuvent permettre de mieux détecter les erreurs que nous avons commises.

Le trait de soulignement est simplement un moyen de gérer la transition du code hérité; noms de méthodes incluant un premier paramètre implicite. Vous devez remplacer les soulignés que la migration ajoute à votre code par une étiquette de paramètre explicite. Vous savez que cela a du sens.

0
elves