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

在Swift中将具有多个参数的函数作为闭包传递,swift,function,closures,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 = Fo

是否可以在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(uz:)
分配给
bar2
。这在Swift中可能吗?如果是,怎么做?

只需写

let bar2: (String, String) -> () = foo.bar
编译器实际上根据您为
bar2
指定的类型推断出正确的方法

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

酒吧:嗨,巴兹:嗨

请注意,省略特定类型的
bar2
将导致编译器抱怨:

错误:“bar”的用法模棱两可

类似的问题:。我不太清楚为什么我不能跳,但确实这样做了。谢谢