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

标签 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 中可能吗?如果是这样,怎么办?

最佳答案

简单写

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

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

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

bar: hi, baz: hi2

请注意,省略 bar2 的特定类型将导致编译器报错:
错误:“bar”的使用不明确

关于swift - 在 Swift 中将具有多个参数的函数作为闭包传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516856/

相关文章:

javascript - 使用通用的空函数而不是在每个类实例中创建一个新函数是否更有效?

closures - 闭包的类型别名

python - 将 memoization 装饰器理解为闭包

swift - 访问 Swift 4 中 PartialKeyPath 的可选值

ios - 如何从 iOS 应用程序中删除场景委托(delegate)?

ios - Swift @escaping 仅适用于非空函数参数?

javascript - 如何在另一个函数内的变量内调用函数?

node.js - JS/node.js : Large switch-case blocks vs. 函数集合

javascript - 为什么我的递归函数调用没有返回值?

ios - 在 swift 中使用公钥加密