首页 文章

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

提问于
浏览
3

只是学习闭包和嵌套功能 . 鉴于下面的嵌套函数:

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 回答

  • 5

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

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

    这将工作正常:

    printerFunction(2)
    

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

    let printAndReturnIntegerFunc = printerFunction()
    

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

    enter image description here

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

    printAndReturnIntegerFunc(2)
    
  • 6

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

相关问题