Swift:使用已知类型语法关闭

时间:2016-05-24 16:56:42

标签: swift swift2

我正在尝试理解已知类型闭包背后的语法。

以下是一个例子:

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并返回IntInt也会返回applyMultiplication

但是我对Int如何导致它返回{value in value * 3}感到困惑?

1 个答案:

答案 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)