LoginSignup
0
0

More than 5 years have passed since last update.

typealias + closure を使ってみる Swift3.0

Last updated at Posted at 2017-09-06

まだ自分でもよく理解できていません。詳しい方教えてください。でも、もしかしたらtypealiasとclosureを使うと(特にこの記事ではtypealias)コードが簡潔っていうか読みやすくなるのかもしれない。

typealiasを使う


//関数でパラメータとしての閉包を宣言する
//タイプエイリアスでクロージャ構文タイプを定義します
typealias closure = (Int , Int) -> ()


//クロージャ構文を使用して関数を宣言します。
func myClosureFunction(action: closure) -> () {
    action(2,5)
}


//クロージャを呼び出して関数内でその値を取得します。 ブロック内でAとBの値を得ることができます。
myClosureFunction { (A, B) in
    print(A) //2
    print(B) //5
}

typealiasを定義してclosureという型を使えるようにします。closureは二つのInt型の引数を受け取り何も返しません。だから(Int , Int) -> (Void)でも良いです。

次、クロージャ構文を使用して関数を宣言します。actionという引数で先ほど宣言したtypealias closureを指定します。closure型の引数actionを受け取る関数です。closure型の引数actionは二つのInt型の引数を受け取り何も返さない型ですからaction(2,5)という風にすれば引数actionに二つのInt型の値が渡されます。

最後にクロージャを呼び出して関数内でその値を取得します。 ブロック内でAとBの値を得ることができます。余談ですがクロージャっていうのは即時関数だから、呼び出さなくても実行できるのかな?と思っていたけれど、結局呼び出さなければいけないらしいです。どうしてA, Bという引数名で値が取得できるのかは謎です。

typealiasを使わない



//クロージャ構文を使用して関数を宣言します。
func myClosureFunctionNoClosure(actionn: Int, actionnn: Int) -> () {
    print(actionn)
    print(actionnn)
}
myClosureFunctionNoClosure(actionn:2, actionnn:5)
//2
//5

上記のtypealiasを使う方のコードをtypealiasを使わないで書くとこんな感じになるんでしょうか。先ほど申し上げたように、どうしてtypealiasを使うとA,Bで受け取れるのか謎です。typealiasを使わない方だとA,Bじゃ受け取れません。この関数は、二つにIntを受け取る引数をとって何も返さない関数です。呼び出すときに引数に二つのIntを私て関数の中で引数の値を受け取ってprintします。クロージャ構文を使用してと書いてありますが、これって単純に関数じゃないかと思うような。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0