在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)
是否可以调用第一种方法或第三种方法,而不给第二个参数添加标签?
旁注:这是一种语言功能吗?编译器不应该警告我吗?它目前告诉我,在调用函数时我错过了第二个参数,但对我来说似乎甚至无法提供此参数。