swift function() - > (Int) - >串

时间:2018-06-02 15:24:26

标签: 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: 5'

为什么我需要提供()后跟(5)才能得到这个结果?

我需要理解如何将5值赋给innerFunc

的参数“i”

我真的很感激任何解释此功能的指针。

3 个答案:

答案 0 :(得分:1)

因为returnFunc的返回是一个意味着

的函数
returnFunc() = innerFunc 

所以这个

returnFunc()(5)

装置

innerFunc(5)

答案 1 :(得分:0)

returnFunc是一个curried函数,其类型也可以写为func returnFunc() -> ((Int) -> String),因为它实际上是一个不带输入参数的函数,并返回另一个输入单个输入的函数类型为Int的参数,并返回String

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

如果你分步写出来就会变得更加清晰:

let innerFunc = returnFunc()
let fiveString = innerFunc(5) // "value returned: 5"

答案 2 :(得分:0)

这是因为returnFunc()实例化了一个带有整数并返回字符串的函数的新实例。

returnFunc()(5)也会调用该函数并将5作为参数传递给此返回函数,因为它们被链接在一起。

有点像函数返回一个数组,你可以使用:

访问一个数组元素
func returnArray() -> [Int] {
    return [0, 1, 2, 3, 4]
}

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