2016-05-24 3 views
0

既知のタイプクロージャの構文を理解しようとしています。以下はSwift:既知のタイプのクロージャー構文

例です。

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) 
} 

私の理解では、次のとおりです。 applyMultiplicationvalueと呼ばれるIntに取り、そしてIntとかかり​​と呼ばれる閉鎖Intを返します。 applyMultiplicationInt

を返します。しかし、私は{value in value * 3}はそれが6を返すようになりない方法としてで混乱していますか?

答えて

3

multiFucntion: Int -> Int.ない(multiFunction: Int) -> Int?

​​である、それはタイプとは何の関係もありません、関数のパラメータ名です。タイプは(Int) -> Intです。 Intパラメータを1つ持ち、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) 

は、多分それはこの方法で、より読みやすいかもしれません

関連する問題