我正在尝试理解已知类型闭包背后的语法。
以下是一个例子:
func applyMutliplication(value: Int, multiFunction: Int -> Int) -> Int {
return multiFunction(value)
}
applyMutliplication(2, multiFunction: {value in
value * 3 // returns a 6
})
我正在与multiFucntion: Int -> Int
挣扎。这与(multiFunction: Int) -> Int
相同吗?
当我尝试在操场上尝试以下签名时,我收到错误:
//below gives an error
func applyMutliplication(value: Int, ((multiFunction: Int) -> Int)) -> Int {
return multiFunction(value)
}
我的理解是:
applyMultiplication
会收到名为Int
的{{1}},以及一个名为value
的关闭,该关闭需要multiFunction
并返回Int
。 Int
也会返回applyMultiplication
但是我对Int
如何导致它返回{value in value * 3}
感到困惑?
答案 0 :(得分:3)
multiFucntion: Int -> Int.
不 (multiFunction: Int) -> Int?
multiFunction
是一个函数参数名,它与该类型没有任何关系。类型只是(Int) -> Int
。一个函数,其中包含一个Int
参数并返回Int
。
您正在传递一个闭包,该闭包返回其参数乘以3
,并且您将其作为参数传递给它2
。结果是逻辑6
。
也许这样可以更具可读性:
func applyMutliplication(value: Int, multiFunction: Int -> Int) -> Int {
return multiFunction(value)
}
let multiplyByThree: (Int) -> Int = {value in
value * 3 // returns a 6
}
applyMutliplication(2, multiFunction: multiplyByThree)