2015-06-25 30 views
3

刚学习关闭和嵌套功能。下面给出嵌套函数:Swift Closure为什么调用函数返回错误?

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作为参数来获得返回值?

​​
+0

什么样的错误?它发生在哪里? –

+0

无法用类型为'(Int)'的参数列表调用'printerFunction' - 是错误消息。我想我只是基本上困惑,为什么当我将printerFunction()分配给常量时,我​​可以通过常量传递变量,但我不知道变量实际在函数本身中使用的位置。 – Chris

+2

您最后两行的单行等价物是'printerFunction()(2)'。 – ahruss

回答

6

所有你所得到的错误这里printerFunction(2)因为printerFunction不能采取任何参数,如果你想给一个说法,那么你可以不喜欢它的第一:

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


} 

,这将很好地工作:

printerFunction(2) 

之后,你对这样的另一个变量给该函数的引用:

let printAndReturnIntegerFunc = printerFunction() 

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

enter image description here

这意味着它接受一个Int,它会返回void所以这将工作:

printAndReturnIntegerFunc(2) 
5

(1)的printerFunction函数签名是() -> (Int) ->()这意味着它不带参数并返回另一个功能,这就是为什么当你尝试调用printerFunction(2)与参数给你一个错误。
(2)返回函数的签名为(Int) ->(),这意味着它需要一个Int参数并返回Void。所以printAndReturnIntegerFunc(2)工作

相关问题