L'une des raisons possibles est qu'il s'agit en fait d'une méthode. Les méthodes sont très sournoises, elles ressemblent à des fonctions normales, mais elles n'agissent pas de la même manière :
func funFunction(someArg: Int, someOtherArg: Int) {
println("funFunction: \(someArg) : \(someOtherArg)")
}
// No external parameter
funFunction(1, 4)
func externalParamFunction(externalOne internalOne: Int, externalTwo internalTwo: Int) {
println("externalParamFunction: \(internalOne) : \(internalTwo)")
}
// Requires external parameters
externalParamFunction(externalOne: 1, externalTwo: 4)
func externalInternalShared(#paramOne: Int, #paramTwo: Int) {
println("externalInternalShared: \(paramOne) : \(paramTwo)")
}
// The '#' basically says, you want your internal and external names to be the same
// Note that there's been an update in Swift 2 and the above function would have to be written as:
func externalInternalShared(paramOne paramOne: Int, #paramTwo: Int) {
print("externalInternalShared: \(paramOne) : \(paramTwo)")
}
externalInternalShared(paramOne: 1, paramTwo: 4)
Maintenant, voici la partie amusante, déclarer une fonction à l'intérieur d'une classe et ce n'est plus une fonction ... c'est une méthode.
class SomeClass {
func someClassFunctionWithParamOne(paramOne: Int, paramTwo: Int) {
println("someClassFunction: \(paramOne) : \(paramTwo)")
}
}
var someInstance = SomeClass()
someInstance.someClassFunctionWithParamOne(1, paramTwo: 4)
Cela fait partie de la conception du comportement des méthodes.
Apple Docs :
Plus précisément, Swift attribue par défaut au premier nom de paramètre d'une méthode un nom de paramètre local, et attribue par défaut au deuxième nom de paramètre et aux suivants des noms de paramètres à la fois locaux et externes. Cette convention correspond à la convention de nommage et d'appel typique que vous connaissez pour avoir écrit des méthodes en Objective-C, et permet des appels de méthode expressifs sans avoir besoin de qualifier vos noms de paramètres.
Remarquez l'autocomplétion : ![enter image description here]()
2 votes
Le nom de votre fonction est "say" et pourtant vous appelez sayHello ??
1 votes
Éventuellement en rapport : stackoverflow.com/questions/24049272/
0 votes
J'ai déjà vu cette question, mais elle n'a pas résolu mon problème.
0 votes
S'agit-il d'une méthode ? (Une fonction dans le cadre d'une classe ?)