Impossible de surcharger la fonction dans viewDidLoad () dans swift

Impossible de surcharger la fonction dans viewDidLoad () dans swift. Il donne une erreur "conflit de définition avec la valeur précédente" à "func joinSsortingng (#ssortingngs: Ssortingng …) -> Ssortingng {"

override func viewDidLoad() { super.viewDidLoad() func joinSsortingng(#ssortingngs: Ssortingng[]) -> Ssortingng { var str = "" for s in ssortingngs { str += s } return str } func joinSsortingng(#ssortingngs: Ssortingng...) -> Ssortingng { return joinSsortingng(ssortingngs: ssortingngs) } println(joinSsortingng(ssortingngs : ["I", "am", "an", "array"])) println(joinSsortingng(ssortingngs : "I", "am", "an", "array")) } 

Cela ressemble à un bug Swift (ou une ressortingction non documentée) pour moi. La surcharge de fonction / méthode fonctionne généralement, même avec des parameters de tableau vs variadiques:

 class MyClass { func foo(arg: Int) { println("An integer") } func foo(arg: Double) { println("A double") } func joinSsortingng(#ssortingngs: Ssortingng[]) { println("An array") } func joinSsortingng(#ssortingngs: Ssortingng...) { println("Variadic parameters")} func test() { foo(2) foo(3.14) joinSsortingng(ssortingngs : ["I", "am", "an", "array"]) joinSsortingng(ssortingngs : "I", "am", "an", "array") } } 

et produit la sortie attendue:

 Un integer
 Un double
 Un tableau
 Paramètres variadiques

Mais la surcharge ne fonctionne pas pour les fonctions nestedes :

 class MyClass { func test() { func foo(arg: Int) { println("An integer") } func foo(arg: Double) { println("A double") } // error: definition conflicts with previous value func joinSsortingng(#ssortingngs: Ssortingng[]) { println("An array") } func joinSsortingng(#ssortingngs: Ssortingng...) { println("Variadic parameters")} // error: definition conflicts with previous value func test() { foo(2) foo(3.14) joinSsortingng(ssortingngs : ["I", "am", "an", "array"]) joinSsortingng(ssortingngs : "I", "am", "an", "array") } } } 

Vous ne pouvez pas surcharger de cette manière:

 func joinSsortingng(#ssortingngs: Ssortingng[]) -> Ssortingng { ... } func joinSsortingng(#ssortingngs: Ssortingng...) -> Ssortingng { ... } 

Les fonctions joinSsortingng ont réellement la même signature. Les deux prennent Array mais la signature de la version variadique provoque la génération du compilateur avec Array en utilisant les arguments passés sur le site d'appel.