Swift:函数编译,没有警告,但是甚至可以使用这个函数吗?

时间:2017-01-10 08:56:04

标签: swift swift3 variadic-functions

在Swift中,似乎可以使用vararg参数创建一个可变参数函数,该参数不是函数的最后一个参数。

我创建了以下功能:

func test1(_ array: String..., _ tag: String){
    print("[\(tag)] array: \(array)")
}

因为可以定义一个vararg参数而不使它成为最后一个参数,我怀疑Swift编译器只接受最后一个参数并使其成为第二个参数的参数。

test1("Hello", "World", "Greeting")

但这并不奏效,这并不奇怪。

这不起作用:

let arrayOfStrings: [String] = ["Hello", "World"]
test1(arrayOfStrings, "Greeting")

显然,给第二个参数标签有效。

func test2(_ array: String..., tag: String){
    print("[\(tag)] array: \(array)")
}

但我决定再试一次。此函数编译时不会生成警告,但我甚至可以使用它吗?

func test3(_ array: String..., _ tag: Int){
    print("[\(tag)] array: \(array)")
}

test3("Hello", "World", 1)

是否可以调用第一种方法或第三种方法,而不给第二个参数添加标签?

  

旁注:这是一种语言功能吗?编译器不应该警告我吗?它目前告诉我,在调用函数时我错过了第二个参数,但对我来说似乎甚至无法提供此参数。

0 个答案:

没有答案