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

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

然后尝试:
anyFunc(print("hello"))

这产生ERROR: 'print' produces '()', not the expected contextual result type '(_...) -> _'
我怎样才能做到这一点(可行)?

最佳答案

像这样使用@autoclosure怎么样:

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

anyFunc(print("hello"))

10-06 02:46