如何将任何函数作为参数传递并在Swift中执行?

时间:2016-11-29 15:22:44

标签: swift function parameter-passing

我试图编写一个可以将任何函数作为参数并在Swift中执行的函数。我尝试过这种方法:

public func anyFunc<P, T> (_ function: (P...) -> T) {
    _ = function()    
}

然后尝试:

anyFunc(print("hello"))

这会产生ERROR: 'print' produces '()', not the expected contextual result type '(_...) -> _'

我如何实现这一目标(并且可行)?

1 个答案:

答案 0 :(得分:7)

如何使用@autoclosure,如此:

func anyFunc<T>(_ closure: @autoclosure () -> T) {
  let result: T = closure()
  // TODO: Do something with result?
}

anyFunc(print("hello"))