私はこれにどのようにアプローチするかについて興味がありました。関数があり、それが完全に実行されたときに何かを実行したい場合、これを関数にどのように追加しますか? ありがとう
154551 次
7 に答える
115
私は答えを理解するのに苦労したので、私のような他の初心者は私と同じ問題を抱えていると思います.
私の解決策はトップの回答と同じですが、初心者や一般的な理解に問題がある人にとっては、もう少し明確で理解しやすいことを願っています.
完了ハンドラを持つ関数を作成するには
func yourFunctionName(finished: () -> Void) {
print("Doing something!")
finished()
}
機能を使用するには
override func viewDidLoad() {
yourFunctionName {
//do something here after running your function
print("Tada!!!!")
}
}
あなたの出力は
なんかやってる
多田!!!
お役に立てれば!
于 2017-01-08T23:29:12.127 に答える
18
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 の後に何かをする!!
于 2019-12-20T11:18:12.113 に答える
1
上記に加えて:トレーリング クロージャを使用できます。
downloadFileFromURL(NSURL(string: "url_str")!) { (success) -> Void in
// When download completes,control flow goes here.
if success {
// download success
} else {
// download fail
}
}
于 2016-08-27T17:05:37.380 に答える
0
カスタムメイドの完了ハンドラについて少し混乱しています。あなたの例では:
ネットワークからファイルをダウンロードするダウンロード機能があり、ダウンロード タスクが終了したときに通知を受け取りたいとします。
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)
于 2016-01-06T23:55:24.867 に答える