给出以下功能:
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”我真的很感激任何解释此功能的指针。
答案 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