【发布时间】:2017-04-13 15:53:42
【问题描述】:
我正在尝试编写一个可以将任何函数作为参数并在 Swift 中执行的函数。我试过这种方法:
public func anyFunc<P, T> (_ function: (P...) -> T) {
_ = function()
}
然后尝试:
anyFunc(print("hello"))
这会产生ERROR: 'print' produces '()', not the expected contextual result type '(_...) -> _'
我怎样才能做到这一点(是否可行)?
【问题讨论】:
-
你为什么使用
<P, T>?传递的函数是否应该返回 void? -
print("hello")是对函数print的调用,它返回一个结果(空元组())。因此,您对anyFunc的调用等效于anyFunc(()),这自然是与anyFunc的参数不匹配。 -
一般情况下,如果
function()接受任意数量的参数,您如何期望在不传递任何参数的情况下调用它? -
@dfri 因此我的问题:-)
-
@jtbandes 如果你传递一个带有 2 个 args 的函数,AnyFunc 会用这两个 args 执行这个函数。如果你通过 0 args 传递一个,它会用 0 args 执行它。如果你传递一个带有 8 个 args 的参数,它会使用 8 个 args 执行它。 如何将任何函数作为参数传递然后执行?我正在尝试在 Swift 中实现
debounce方法:lodash.com/docs/#debounce
标签: swift function parameter-passing