6日目-21.06.13


学習キーワード

  • closure
  • 1. Creating basic closures


    sweetの複数のタイプを宣言するように、関数タイプを宣言できます.
    すなわち、関数を作成して変数に割り当て、関数を呼び出し、パラメータとして他の関数に渡すことができます.
    →このように用いられる関数をモジュールと呼ぶ.
    let driving: () -> () = {
        print("I'm driving in my car")
    }
    
    driving()
    なぜロッカーを使うのですか?
    一般的な理由の1つは、機能を保存し、必要に応じて使用することです.
  • 例)
  • Running some code after a delay.
  • Running some code after an animation has finished.
  • Running some code when a download has finished.
  • Running some code when a user has selected an option from your menu.
  • 2. Accepting parameters in a closure


    モジュールでは、パラメータは受信できますが、受信方法は異なります.
    パラメータを取得するには、{}カッコにパラメータをリストし、()キーワードの後にコードを記述します.
    let driving: (String, Int) -> () = { (name: String, number: Int) in
        print("My Car is \(name) - \(number)")
    }
    
    driving("Tico", 213)

  • 関数とモジュールの違いの1つは、モジュールを実行するときにパラメータラベルを使用しないことです.モジュール内でのパラメータラベルの使用

  • 外部パラメータ名を指定できません.

  • エンクロージャにはパラメータ名を指定する必要があります.データ型のみを入力するとエラーが発生します.

  • モジュールはパラメータタイプを省略できません.
  • 3. Returning values from a closure


    モジュールは値を返すことができます.モジュール内のinキーワードの前に作成します.
    let drivingWithReturn: (String) -> String = { (place: String) -> String in
        return "I'm going to \(place) in my car"
    }
    パラメータなしで戻りたい場合はどうすればいいですか?
    関数と同じ括弧inを使用します.
    // MARK - 매개 변수를 받아들이지 않고 값을 반환
    
    let closurePayment = { () -> Bool in
        print("Paying an anonymous person…")
        return true
    }
    
    func functionPayment() -> Bool {
        print("Paying an anonymous person…")
        return true
    }

    4. Closures as parameters


    モジュールはタイプのように使用できるので、モジュールをパラメータとして関数に渡すことができます.
    モジュールをパラメータとして使用する場合は、非同期処理が便利です.終了時の行動をとることができます.(ネットワークリクエスト、バックグラウンド実行タスクなど)
    let driving: () -> Void = {
        print("I'm driving in my car")
    }
    
    func travel(action: () -> ()) {
        print("I'm getting ready to go.")
        action()
        print("I arrived!")
    }
    
    travel(action: driving)
    
    💡 Voidは何も返さないことを示す

    5. Trailing closure syntax


    関数の最後のパラメータがモジュールである場合、swiftは()後行モジュール構文と呼ばれる特殊な構文を使用することができる.
    // MARK - 클로저가 매개변수 마지막인경우
    func travel(name: String, action: () -> Void) {
        print("I'm getting ready to go.")
        action()
        print("I arrived!")
        print("My \(name)")
    }
    
    travel(name: "Taylor") {
        print("I'm driving in my car")
    }
    
    // MARK - 후행클로저 사용안 한 경우 
    travel(name: "Taylor", action: {
        print("I'm driving in my car")
    })
    
    // MARK - 클로저가 매개변수 마지막이 아닌 경우
    
    func travel(action: () -> Void, name: String) {
        print("I'm getting ready to go.")
        action()
        print("I arrived!")
        print("My \(name)")
    }
    
    travel(action: {
        print("I'm driving in my car")
    }, name: "Taylor")
    
  • の後行モジュールを使用してパラメータラベルを削除し、関数呼び出しを終了するとtrailing closure syntaxを無効にできます.
  • 後続のモジュールを使用している場合は、パラメータの外部名を指定できます.
    func goCamping(then action: () -> Void) {
        print("We're going camping!")
        action()
    }
    goCamping {
        print("Sing songs")
        print("Put up tent")
        print("Attempt to sleep")
    }
    
    goCamping(then: {
        print("Sing songs")
        print("Put up tent")
        print("Attempt to sleep")
    })
  • を使用すると、外部名は省略できます.
  • リンク


    100 Days of Swift - Day 6 - Hacking with Swift