无法在swift中的viewDidLoad()中重载函数

无法在swift中的viewDidLoad()中重载函数。 它给出错误definition conflict with previous value" at "func joinString(#strings: String...) -> String {

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

这对我来说就像一个Swift bug(或一个没有文档的限制)。 函数/方法重载通常工作,即使使用数组与可变参数:

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

并产生预期的输出:

整数
一双
数组
变量参数

但重载不适用于嵌套函数

 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 joinString(#strings: String[]) { println("An array") } func joinString(#strings: String...) { println("Variadic parameters")} // error: definition conflicts with previous value func test() { foo(2) foo(3.14) joinString(strings : ["I", "am", "an", "array"]) joinString(strings : "I", "am", "an", "array") } } } 

你不能以这种方式超载:

 func joinString(#strings: String[]) -> String { ... } func joinString(#strings: String...) -> String { ... } 

joinString函数实际上具有相同的签名。 两者都采用Array但可变版本的签名会导致编译器使用调用站点传递的参数生成Array。