【问题标题】:Passing function with multiple arguments as a closure in Swift在 Swift 中将具有多个参数的函数作为闭包传递
【发布时间】:2015-12-29 18:29:00
【问题描述】:

是否可以将具有多个参数的函数/方法视为 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 中可能吗?如果有,怎么做?

【问题讨论】:

标签: swift function closures


【解决方案1】:

简单写

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

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

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

bar:嗨,baz:hi2

注意省略bar2的具体类型会导致编译器报错:
error: ambiguous use of 'bar'

【讨论】:

  • 不太清楚为什么我不能实现这一飞跃,但确实可以。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 2016-02-16
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多