匿名闭包参数未包含在闭包中

时间:2014-06-02 21:03:20

标签: swift

为什么这段代码不起作用?

func function (param1 : Int, param2 : Int) -> Int {
    return $0 + $1
}

产生错误:

  

错误:匿名闭包参数未包含在闭包中

3 个答案:

答案 0 :(得分:9)

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

例如:

var sevenMultiplyedByThree: Int = {
    return $0 * 3
}(7)

此外,这仅适用于匿名参数,因此以下代码不起作用:

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

答案 1 :(得分:4)

我知道了,当你没有名为的闭包的参数时,会使用索引访问参数:

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

result

结果现在是15

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

result2

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

答案 2 :(得分:4)

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

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

您的职能声明:

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