-1

これがクロージャー付きの私の関数宣言です

func isTextValid(input: String, completion: (result: Bool) -> ()) {
    if input == "Hello" {
        completion(result: true)
    }
    else {
        completion(result: false)
    }
}

このように以下の関数を呼び出すと、「false」である正しい結果が出力されず、代わりに「(0要素)」が出力されます

isTextValid("hi", { (result) -> () in
    println(result)
})

しかし、以下のようなコードを書くと、問題なく動作します。

isTextValid("hi", { (result) -> () in
   if result == false {
      println(result)
   }
})

// また

isTextValid("hi", { (result) -> () in
   if result == false {

   }
   println(result)
})

私は Swift プログラミング言語の初心者で、最近 Swift 言語を試していますが、構文とクロージャの使用に完全に困惑しています。これらの構文の両方の違いは何か、2 番目の構文では正常に機能するが、最初の構文では正常に機能しない理由を説明してください。

前もって感謝します。ハッピーコーディング。

4

1 に答える 1

1

View -> Assistant Editor -> Show Assistant Editorプレイグラウンドを使用していると思います。実際のコンソール ログを表示するように選択できます

isTextValid("hi", { (result) -> () in
    println(result)
})

isTextValid("hi", { (result) -> () in
    if result == false {
        println(result)
    }
})

isTextValid("hi", { (result) -> () in
    if result == false {
        
    }
    println(result)
})

出力

間違い

間違い

間違い

また、このように関数を呼び出すことができます

    isTextValid("hi"){
        (result) -> () in
        println(result)
    }
    isTextValid("hi"){
        println($0)
    }
于 2015-06-05T07:31:53.563 に答える