在Swift中传递带有多个参数的函数作为闭包

时间:2015-12-29 18:29:00

标签: swift function closures

是否可以将具有多个参数的函数/方法视为Swift中的闭包?我特别询问初始函数名称与其他函数相同的情况,并通过其参数的数量/类型/名称来区分。例如,请执行以下操作:

class Foo {
    func bar(bar: String) { print("bar: \(bar)") }
    func bar(bar: String, baz: String) {
        print("bar: \(bar), baz: \(baz)")
    }
}

let foo = Foo()
let bar1: (String) -> () = foo.bar
let bar2: (String, String) -> () = ???

单个参数bar(_:)函数可以分配给(String) -> ()类型的变量,就像分配给bar1时一样。但是,我无法弄清bar(_:baz:)如何分配给bar2。这在Swift中可能吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

简单写一下

let bar2: (String, String) -> () = foo.bar

编译器实际上是根据您为bar2指定的类型推断出正确的方法。

然后调用bar2("hi", "hi2")将输出

  

bar:嗨,baz:hi2

请注意,省略特定类型的bar2会导致编译器抱怨:
error: ambiguous use of 'bar'