Swift 闭包中不包含匿名闭包参数

Swift 闭包中不包含匿名闭包参数,swift,Swift,为什么这个代码不起作用 func function (param1 : Int, param2 : Int) -> Int { return $0 + $1 } 它会产生一个错误: 错误:闭包中不包含匿名闭包参数 似乎您只能通过匿名闭包中的数字访问参数,而不能访问函数 例如: var sevenMultiplyedByThree: Int = { return $0 * 3 }(7) 此外,这仅适用于匿名参数,因此以下代码将不起作用: var sevenMultiply

为什么这个代码不起作用

func function (param1 : Int, param2 : Int) -> Int {
    return $0 + $1
}
它会产生一个错误:

错误:闭包中不包含匿名闭包参数


似乎您只能通过匿名闭包中的数字访问参数,而不能访问函数

例如:

var sevenMultiplyedByThree: Int = {
    return $0 * 3
}(7)
此外,这仅适用于匿名参数,因此以下代码将不起作用:

var sevenMultiplyedByThree: Int = {
    (namedParameter : Int) -> Int in
    return $0 * 3
}(7)

我明白了,当您没有名为的闭包参数时,将使用通过其索引访问参数:

var result = {$0 + 10}(5)

result
现在的结果是15

相比之下

var result2 = {
    (param: Int) -> Int in
    return param + 10
}(5)

result2

无法使用$0而不是param,因为param是一个命名的参数。

Swift自动提供“速记参数”,匿名参数“$”,仅在内联闭包内没有参数声明

您已声明接收参数param1和param2的函数。 您可以使用它将函数作为闭包(块)发送或添加闭包执行。 见下例:

您的函数声明:

func function (param1 : Int, param2 : Int) -> Int 
{
    return param1 + param2
}
调用闭包的函数

func getSum(sumFunction:(Int, Int) -> (Int)) -> (Int)
{
    return sumFunction(3,5)
}
三种可能的用法:

    getSum(sumFunction: function)
    getSum { (param1, param2) -> (Int) in
        return param1 + param2
    }

    getSum {
        return $0 + $1
    }
在上一个getSum中,您有内联闭包,没有参数声明,只有在这里您可以使用$0

$-通过名称$0、$1等引用闭包参数的值


$0=param1,$1=param2

第二个代码块的样式可能更好。