Unable to overload function in viewDidLoad() in swift

后端 未结 2 1328
野趣味
野趣味 2021-01-22 08:18

Unable to overload function in viewDidLoad() in swift. It gives error definition conflict with previous value\" at \"func joinString(#strings: String...) ->

相关标签:
2条回答
  • 2021-01-22 09:02

    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.

    0 讨论(0)
  • 2021-01-22 09:05

    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")
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题