不明白这个Trailing Closure

时间:2015-09-24 17:51:53

标签: swift swift2

我很快就到这儿了。正在阅读关于weheartswift的关闭。有一节谈论尾随关闭。这里有三个问题:

  1. 我认为代码中有一些拼写错误:不应该只是函数吗?
  2. 我认为{}中的3行代码只是f:(Int) - >的尾随闭包。 (Int),但3行代码中的f(i)是什么意思?
  3. 当我尝试在游乐场中运行此代码时,它会在行上显示此错误:" return sum" void函数中出现意外的非void返回值。
  4. 代码:

    function sum(from: Int, to: Int, f: (Int) -> (Int)) {    
    
        var sum = 0
        for i in from...to {    
        sum += f(i)
        }
        return sum
    }
    
    sum(1, 10) {    
    
         $0    
    } // the sum of the first 10 numbers 
    
    sum(1, 10) {
    
        $0 * $0
    } // the sum of the first 10 squares
    

1 个答案:

答案 0 :(得分:2)

这是您的工作代码:

func sum(from: Int, to: Int, f: (Int) -> (Int)) -> Int{
    var sum = 0
    for i in from...to {
        sum += f(i)
    }
    return sum
}

sum(1, to: 10) {
    $0
} // the sum of the first 10 numbers

sum(1, to: 10) {
    $0 * $0
} // the sum of the first 10 squares

根据您的错误,它表示您声明的函数没有任何返回值,但最后返回Int return sum。因此,通过添加-> Int来更改您的函数语法,如上面的代码所示,该函数将返回Int并且它将正常工作。