给定相同的回调实现,抽象函数调用

时间:2018-04-25 16:50:58

标签: swift

假设我在下面定义了2个函数foobar

func foo(completion: @escaping (Response) -> Void)
func bar(a: Int, completion: @escaping (Response) -> Void)

然后我有两个使用foobar

的不同功能
func doSomethingWithFoo() {
    foo { response in
        handleResponse(response)
    }
}

func doSomethingWithBar() {
    bar(a: 42) { response in
        handleResponse(response)
    }
}

doSomethingWithFoodoSomethingWithBar非常相似。他们使用response回调中的completion执行完全相同的操作。

我的问题是:Swift中是否有一种方法可以概括doSomethingWithFoodoSomethingWithBar?也许符合以下内容。

func doSomething(<???>) {
    <???> { response in
        handleResponse(response)
    }
}

<???>是一个占位符,用于传递foobar或甚至任何其他也接受(Response) -> Void类型回调的函数。

我会感谢任何帮助/见解。感谢。

1 个答案:

答案 0 :(得分:4)

你可以声明一个这样的函数:

func doSomething(fooBar: (_ completion: @escaping (String) -> Void) -> Void) -> Void {
    fooBar(handleResponse)
}

你会这样称呼:

doSomething(fooBar: { bar(a: 42, completion: $0) })
doSomething(fooBar: foo)