86436


Swift5で、ある特定の処理の終了後に次の処理を行いたいです。  
以下の例だと、myFunction内部のprint("A")を実行したあとに、print("success")を実行しています。

[code]

    import Foundation
    
    @objc func myFunction(completion:@escaping (Bool) -> () ) {
            print("A")
            completion(true)
    }
    
    func testA_Func()
    {
        myFunction { (status) in
            if status {
                print("success")
            }
        }
    }
    
    testA_Func()
    
[/code]

以下のように、myFunctionに引数を追加したところtestFuncAから呼び出す方法がわかりません。

[code]

    import Foundation
    
    @objc func myFunction(argA:String,argB:String,completion:@escaping (Bool) -> () ) {
            print("A")
            print("argA = " + argA)
            print("argB = " + argB)
            completion(true)
    }
    
    func testA_Func()
    {
        let argAstring = "testA"
        let argBstring = "testB"
        myFunction { (argAstring,argBstring,status) in
            if status {
                print("success")
            }
        }
    }
    
    testA_Func()
    
[/code]

どのように、testA_Func()内部からmyFunctionに引数を渡してあげれば良いのでしょうか？


CC BY-SA 4.0
2022-02-18T04:35:54.523
86430
2022-02-18T11:21:52.153
2022-02-18T04:47:50.577
3060
36446
question
swift swift5
completion:@escaping (Bool) -> ()と他の引数を組み合わせる場合


今手元に開発環境がないので動作チェックしていませんが、下記のとおりでどうでしょうか。

[code]

    myFunction(argA: argAstring, argB: argBstring) { (status) in
        if status {
            print("success")
        }
    }
    
[/code]


CC BY-SA 4.0
2022-02-18T04:48:00.007
86431
2022-02-18T04:48:00.007
8077
86430
answer


質問文を拝見した範囲で推察したところ、どうも質問者さんは、Swiftの **Trailing Closure** をご存じないのではないかと見受けられます。

[The Swift Programming Language - Closures](https://docs.swift.org/swift-
book/LanguageGuide/Closures.html)

ネット検索すれば、日本語のTrailing Closuresに関する情報が複数見つかりますので、それらで学習するといいでしょう。

Trailing Closureは、SwiftのSugar
Syntax（糖衣構文）のひとつで、文法通りに記述すると、文字数が多くなったり、プログラマ（人間）が読解しにくくなるコードを、簡潔にかつ理解しやすいように置き換えた構文です。  
Trailing Closureを使わずに、関数`myFunction`（後者の、引数が3つある方）を呼び出すコードを書くと、こうなります。

[code]

    myFunction(argA: argAstring, argB: argBstring, completion: { (status) in
        if status {
            print("success")
        }
    })
    
[/code]

関数の引数をリストするかっこ（()）のうちの閉じかっこ（)）が、遠く離れたところに位置するので、みおとしがちになりますね。引数の中の、後置するクロージャは、かっこの後ろに書くようにしましょう、そうすれば閉じかっこを忘れずにすむというのが、Tailing
Closureです。  
ここまで学習すれば、正しい関数の呼び出し方は、別回答者さんの示したコードになることが、理解していただけると思います。


CC BY-SA 4.0
2022-02-18T10:45:17.550
86436
2022-02-18T11:21:52.153
2022-02-18T11:21:52.153
18540
18540
86430
answer