Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
swift函数()->(Int)->字符串_Swift_Function_Currying - Fatal编程技术网

swift函数()->(Int)->字符串

swift函数()->(Int)->字符串,swift,function,currying,Swift,Function,Currying,鉴于以下功能: func returnFunc() -> (Int) -> String { func innerFunc(i: Int) -> String { return " value returned : \(i)" } return innerFunc } returnFunc() // (Int) -> String -- (correct) returnFunc()(5) // 'value returned

鉴于以下功能:

func returnFunc() -> (Int) -> String {
    func innerFunc(i: Int) -> String {
        return " value returned : \(i)"
    }
    return innerFunc
}

returnFunc()    // (Int) -> String -- (correct)
returnFunc()(5) // 'value returned: 5'
为什么我需要在后面加5才能得到这个结果

我需要了解innerFunc的参数I是如何得到5值的

我真的很感激任何能解释这个特性的指针

因为returnFunc的返回是一个函数

returnFunc() = innerFunc 
那么这个

returnFunc()(5)
意味着

returnFunc是一个函数,其类型也可以写成func returnFunc->Int->String,因为它实际上是一个不接受输入参数的函数,并返回另一个接受Int类型的单个输入参数并返回字符串的函数

因此,通过调用returnFunc,您只需返回一个函数,即innerFunc,但您需要将输入参数传递给innerFunc才能执行它。这是由5结尾的5完成的

如果你把它分步骤写出来,它会变得更清晰:

let innerFunc = returnFunc()
let fiveString = innerFunc(5) // "value returned: 5"
这是因为returnFunc实例化了一个函数的新实例,该实例接受一个整数并返回一个字符串

returnFunc5还调用该函数,并将5作为参数传递给该返回函数,这是由于它们链接在一起的方式

这有点像如果一个函数返回一个数组,您将使用以下命令访问数组元素:

func returnArray() -> [Int] {
    return [0, 1, 2, 3, 4]
}

returnArray()[2] // This evaluates to 2
func returnArray() -> [Int] {
    return [0, 1, 2, 3, 4]
}

returnArray()[2] // This evaluates to 2