[Swift]エンクロージャ(クローズ)


swiftを勉強している間にcloserという単語をよく見かけます私も何度も聞いたことがありますが、いつも「ああそうだ」と言っていますが、直接使うといつも混同されています!
私のような人や整理したいことがたくさんあると思うので文章を書きたいです!
  • シャーシとは?
  • シャーシ表示方法
  • 簡略化
  • エンクロージャ表示
  • 💻 Closerとは?


    では、いったい何がシャーシなのでしょうか.
    モジュールとは、一定の機能を有するコードを1つのブロックに集約することを意味する.
    ああ...関数に似ているような気がしますよね?
    こんな考えがあります!そう、関数もモジュールの形式です.エンクロージャのいくつかの形のうち、一つは関数だそうです.

    💻 キャビネットの表示方法

  • 基本エンクロージャ
  • 後続エンクロージャ
  • 位置によって、キャビネットは基本キャビネット表示法と後続キャビネット表示法に大きく分けることができる.

    🍒 きほんキャビネット


    まず、基本モジュールの形状は次のとおりです.
    { (매개변수들) -> 반환타입 in 
    	실행코드 
    }
    はい!
    例をあげましょうcalculatorという関数を作成しましょう.パラメータは、n 1、n 2および関数タイプの操作であってもよい.
    次に、2つのパラメータ値に乗じて返される乗算関数を宣言し、計算機関数を呼び出します.
    func calculator(n1: Int, n2: Int, operation: (Int, Int) -> Int) -> Int {
    	return operation(n1, n2)
    } 
    
    func multiply(no1: Int, no2: Int) -> Int {
    	return no1*no2
    }
    
    calculator(n1: 2, n2: 3, operation: multiply) //6
    このようなコードが完成しました
    今回はmultiply関数を呼び出すのではなく、モジュールを使用して同じ操作を実行します.
    { (no1: Int, no2: Int) -> Int in
    	return no1 * no2
    }
    
    calculator(n1: 2, n2: 3, operation: { (no1: Int, no2: Int) -> Int in
    	return no1 * no2
    })
    このように記入すると、結果は同じ6!

    🍒 後続エンクロージャ


    後続モジュールで簡単に整理し、後述の例で適用します.

  • 関数またはメソッドの最後のパラメータを渡すモジュールです.
    関数のメソッドまたはカッコを閉じて作成するだけです.

  • 複数の伝達パラメータモジュールを伝達する場合、後続モジュールとして使用できるのは最後のモジュールのみです.

  • また、伝達パラメータとして伝達されるモジュールが1つしかない場合は、括弧を省略することができる.
  • 💻 モジュール表示の簡略化


    簡略化されたCloser表現を見てみましょう!
    calculator(n1: 2, n2: 3, operation: { (no1: Int, no2: Int) -> Int in
    	return no1 * no2
    })
    上のコードを一緒に簡略化します.
  • パラメータタイプ省略
  • 戻りタイプ省略
  • のショートカットパラメータ名
  • を使用
  • 暗示的還元表現
  • 🍒 パラメータタイプをスキップ


    メソッドの伝達パラメータであるモジュールは、メソッドに必要な形で伝達されなければならない.すなわち、伝達パラメータとして伝達するには、パラメータのタイプ、数、または戻りタイプでなければならない.
    伝達パラメータとして伝達されるキャビネットは、適切なタイプに適合していると考えられますか?
    したがって、エンクロージャを実装する際にパラメータタイプを指定する必要はありません.
    calculator(n1: 2, n2: 3, operation: { (no1: Int, no2: Int) -> Int in
    	return no1 * no2
    })
    したがって、このコードはこのように表すことができます.
    calculator(n1: 2, n2: 3, operation: { (no1, no2) -> Int in return no1 * no2 })

    🍒 戻りタイプをスキップ


    パラメータタイプを省略する理由と同じです.
    calculator(n1: 2, n2: 3, operation: { (no1, no2) in return no1 * no2 })
    このように表現することもできます!ますます簡単になったでしょう.

    🍒 ショートカット・パラメータ名の使用


    ずっとコードを書いていますが、これらのパラメータの名前は意味がないと思いますか?SWIFTには、より美しくするためのショートカットパラメータ名が用意されています.
    最初の伝達パラメータから$0、$1、$2...順番に表示されます.
    Closerを表すときはいつもininは、パラメータと戻りタイプと実行コードを区別するためのキーワードであるため、inを省略することができる.
    calculator(n1: 2, n2: 3, operation: { return $0 * $1 })

    🍒 暗黙的な戻り表示


    今何を減らすことができますか?可能ですが、実際にはreturnキーワードを省略することもできます.
    calculator(n1: 2, n2: 3, operation: { (no1, no2) in  no1 * no2 })
    とても簡単になりました!
    また、モジュールが戻り値を持つモジュールであり、モジュール内に実行文が1行しかない場合は、その実行文を戻り値として直接使用できます.
    ショートカットパラメータ名を使用すると、
    calculator(n1: 2, n2: 3, operation: { $0 * $1 })
    こんなに簡単に表現できます!
    後ろ行Closerの特徴を前に書いてあります
  • 関数または方法の最後の伝達パラメータであるモジュール.
    関数のメソッドまたはカッコを閉じて作成するだけです.
  • この機能を使用すると、最後まで簡単に表現できます.
    calculator(n1: 2, n2: 3) { $0 * $1 })
    簡単に減りましたが、私のようなコリンは一目で分かるように、少し毒性が下がっているようです!
    今日はモジュールに関するドキュメントを作成しました.
    早く勉强しなきゃ.がんばって文法を勉强します!!!
    出典:SWIFT SWIFTプログラミング-yagom
    udemi iOS boostcamp-アンジェラ油