简体   繁体   English

无法快速加载viewDidLoad()中的函数

[英]Unable to overload function in viewDidLoad() in swift

Unable to overload function in viewDidLoad() in swift. 无法快速viewDidLoad()中的函数。 It gives error definition conflict with previous value" at "func joinString(#strings: String...) -> String { 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"))
}

This looks like a Swift bug (or an undocumented restriction) to me. 在我看来,这似乎是一个Swift错误(或未记录的限制)。 Function/method overloading works generally, even with array vs variadic parameters: 函数/方法重载通常可以工作,即使使用数组vs可变参数也是如此:

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")
        }
    }
}

You can't overload in this way: 您不能以这种方式超载:

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

The joinString functions actually have same signature. joinString函数实际上具有相同的签名。 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. 两者都使用Array,但是可变参数版本的签名导致编译器使用调用站点中传递的参数使用Array生成。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM