swift - 在 Swift 中访问闭包中的参数数量

标签 swift overloading

假设我有一个函数:

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/

相关文章:

c++ - VC++编译器忽略重载函数

ios - UITableViewCell 中的 UIActivityIndi​​catorView(微调器)无法通过 UITableViewController 快速启动动画

ios - 如何在 Swift 中使用 3d 数组作为 UICollectionView 的数据源?

ios - AVAssetExportSession 只工作前 6 次

ios - 在 Swift 中从 NsDIctionary 获取值(value)

Swift 3 闭包重载解析

c++ - 在 C++ 表达式的末尾键入名称;

unit-testing - 如何对重载函数进行单元测试?

swift - "The file "MyApp.app "couldn' t被打开,因为你在 Xcode 6 Beta 4 中运行应用程序时没有 't have permission to view it"

python - 重载列表理解行为?