只是学习闭包和嵌套功能 . 鉴于下面的嵌套函数:
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 回答
首先,你在这里收到错误
printerFunction(2)
因为printerFunction
不能接受任何参数,如果你想给出一个参数,你可以这样做:这将工作正常:
之后,您将该函数的引用提供给另一个变量,如下所示:
这意味着
printAndReturnIntegerFunc
的类型是这样的:这意味着它接受一个
Int
,它将返回void,所以这将工作:(1)
printerFunction
的函数签名是() -> (Int) -> ()
,这意味着它不带参数并返回另一个函数,这就是为什么当你尝试用参数调用printerFunction(2)
时会给出一个错误 .(2)返回函数的签名是
(Int) -> ()
,这意味着它接受一个Int参数并返回Void
. 所以printAndReturnIntegerFunc(2)
有效