Unable to overload function in viewDidLoad()
in swift.
It gives error definition conflict with previous value\" at \"func joinString(#strings: String...) ->
You can't overload in this way:
func joinString(#strings: String[]) -> String {
...
}
func joinString(#strings: String...) -> String {
...
}
The joinString functions actually have same signature. Both take Array but the signature of the variadic version causes the compiler to generate with Array using the passed arguments at the call site.
This looks like a Swift bug (or an undocumented restriction) to me. Function/method overloading works generally, even with array vs variadic parameters:
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")
}
}
and produces the expected output:
An integer A double An array Variadic parameters
But overloading does not work for nested functions:
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")
}
}
}