Swift Closure为什么调用函数返回错误?

时间:2015-06-25 05:15:54

标签: ios swift function closures

了解闭包和嵌套函数。鉴于下面的嵌套函数:

func printerFunction() -> (Int) -> () {
    var runningTotal = 0
    func printInteger(number: Int) {
        runningTotal += 10
        println("The running total is: \(runningTotal)")
    }
    return printInteger
}

为什么调用func本身会出错,但是当我将func分配给常量时没有错误? printAndReturnIntegerFunc(2)将2 Int作为参数传递给返回值?

printerFunction(2) // error
let printAndReturnIntegerFunc = printerFunction() 
printAndReturnIntegerFunc(2) // no error. where is this 2 going??

2 个答案:

答案 0 :(得分:6)

首先,你在这里得到错误printerFunction(2),因为printerFunction不能接受任何参数,如果你想给出一个参数,那么你可以这样做:

func printerFunction(abc: Int) -> (Int) -> (){


}

这样可以正常工作:

printerFunction(2)

之后,您将该函数的引用提供给另一个变量,如下所示:

let printAndReturnIntegerFunc = printerFunction() 

这意味着printAndReturnIntegerFunc的类型是这样的:

enter image description here

这意味着它接受一个Int并且它将返回void,因此这将起作用:

printAndReturnIntegerFunc(2)

答案 1 :(得分:5)

(1)printerFunction的函数签名是() -> (Int) -> (),这意味着它不带参数并返回另一个函数,这就是为什么当你尝试用参数调用printerFunction(2)时给你一个错误。
(2)返回函数的签名是(Int) -> (),这意味着它接受一个I​​nt参数并返回Void。所以printAndReturnIntegerFunc(2)有效