回答:
ネットワークからファイルをダウンロードするダウンロード機能があり、ダウンロードタスクが完了したときに通知を受け取るとします。
typealias CompletionHandler = (success:Bool) -> Void
func downloadFileFromURL(url: NSURL,completionHandler: CompletionHandler) {
    // download code.
    let flag = true // true if download succeed,false otherwise
    completionHandler(success: flag)
}
// How to use it.
downloadFileFromURL(NSURL(string: "url_str")!, { (success) -> Void in
    // When download completes,control flow goes here.
    if success {
        // download success
    } else {
        // download fail
    }
})それが役に立てば幸い。
私は答えを理解するのに苦労したので、私のような他の初心者が私と同じ問題を抱えていると思います。
私の解決策は上の答えと同じですが、うまくいけば、初心者や一般的に理解するのが難しい人のために、もう少し明確で理解しやすいでしょう。
完了ハンドラーを使用して関数を作成するには
func yourFunctionName(finished: () -> Void) {
     print("Doing something!")
     finished()
}関数を使用するには
     override func viewDidLoad() {
          yourFunctionName {
          //do something here after running your function
           print("Tada!!!!")
          }
    }あなたの出力は
なんかやってる
多田!!!
お役に立てれば!
簡単なSwift 4.0の例:
func method(arg: Bool, completion: (Bool) -> ()) {
    print("First line of code executed")
    // do stuff here to determine what you want to "send back".
    // we are just sending the Boolean value that was sent in "back"
    completion(arg)
}どうやって使うのですか:
method(arg: true, completion: { (success) -> Void in
    print("Second line of code executed")
    if success { // this will be equal to whatever value is set in this method call
          print("true")
    } else {
         print("false")
    }
})この目的でクロージャーを使用できます。以下をお試しください
func loadHealthCareList(completionClosure: (indexes: NSMutableArray)-> ()) {
      //some code here
      completionClosure(indexes: list)
}ある時点で、以下のようにこの関数を呼び出すことができます。
healthIndexManager.loadHealthCareList { (indexes) -> () in
            print(indexes)
}クロージャーについて詳しくは、以下のリンクを参照してください。
Swift 5.0 +、シンプルでショート
例:
スタイル1
    func methodName(completionBlock: () -> Void)  {
          print("block_Completion")
          completionBlock()
    }スタイル2
    func methodName(completionBlock: () -> ())  {
        print("block_Completion")
        completionBlock()
    }使用する:
    override func viewDidLoad() {
        super.viewDidLoad()
        
        methodName {
            print("Doing something after Block_Completion!!")
        }
    }出力
block_Completion
Block_Completionの後で何かします!!
カスタムメイドの完了ハンドラーについて少し混乱しています。あなたの例では:
ネットワークからファイルをダウンロードするダウンロード機能があり、ダウンロードタスクが完了したときに通知を受け取りたいとします。
typealias CompletionHandler = (success:Bool) -> Void
func downloadFileFromURL(url: NSURL,completionHandler: CompletionHandler) {
    // download code.
    let flag = true // true if download succeed,false otherwise
    completionHandler(success: flag)
}あなたは// download codeまだ非同期に実行されます。なぜコードは、あなたにまっすぐに行かないだろうlet flag = trueし、completion Handler(success: flag)あなたのダウンロードコードが終了されるのを待たずに?