假设我在下面定义了2个函数foo
和bar
。
func foo(completion: @escaping (Response) -> Void)
func bar(a: Int, completion: @escaping (Response) -> Void)
然后我有两个使用foo
和bar
func doSomethingWithFoo() {
foo { response in
handleResponse(response)
}
}
func doSomethingWithBar() {
bar(a: 42) { response in
handleResponse(response)
}
}
doSomethingWithFoo
和doSomethingWithBar
非常相似。他们使用response
回调中的completion
执行完全相同的操作。
我的问题是:Swift中是否有一种方法可以概括doSomethingWithFoo
和doSomethingWithBar
?也许符合以下内容。
func doSomething(<???>) {
<???> { response in
handleResponse(response)
}
}
<???>
是一个占位符,用于传递foo
或bar
或甚至任何其他也接受(Response) -> Void
类型回调的函数。
我会感谢任何帮助/见解。感谢。
答案 0 :(得分:4)
你可以声明一个这样的函数:
func doSomething(fooBar: (_ completion: @escaping (String) -> Void) -> Void) -> Void {
fooBar(handleResponse)
}
你会这样称呼:
doSomething(fooBar: { bar(a: 42, completion: $0) })
doSomething(fooBar: foo)