假设我有一个函数:
func test(closure: (closureArgs: Double ...) -> Double){
//some logic
}
然后,我调用它:
test({$0 + $1 + $2 + $3})
是否可以获取test
中提供的closureArgs
的数量?目标是做重载。例如,test
可以包含如下代码:
func test(closure: (closureArgs: Double ...) -> Double){
//somehow get access to number of arguments in closureArgs within the closure that was passed.
}
澄清一下——我的意思是我需要在 test
内部访问 closureArgs 的长度,但在 closure
外部访问
最佳答案
Is it possible to get the number of closureArgs provided within test?
简短的回答
没有。
稍微长一点的回答
不,不是。原因如下:
该函数采用闭包作为参数,根据定义采用可变数量的参数。调用函数的人无法提前指定闭包应采用的参数数量。例如,如果我要调用您的函数,它可能如下所示:
test() { (closureArgs: Double...) -> Double in
var n: Double = 0
for i in closureArgs {
n += i
}
return n
}
您会注意到,我没有在任何地方定义参数的数量,因为参数的数量仅在调用闭包时指定。然后可以在内部确定该数字,或者可能返回该数字。
基本上,闭包是在测试中调用的,因此只有调用者知道它需要多少参数。任何使用此功能的人都无法控制它。
关于swift - 在 Swift 中访问闭包中的参数数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27926537/