私には機能があります。それは素晴らしい実行しますが、私はそれを再度呼び出す場合は、その関数はすでに完了していることを知っているので、私は再びそれを呼び出すしようと自動的に完了に渡します。完了ハンドラをリセットするにはどうすればよいですか?スウィフトで完了ハンドラをリセットする方法
コード:私はおよそ分後に再びそれを呼び出すようにした場合
self.Test(completionHandler: { finished in
print("We have completed function)")
})
:
func Test(completionHandler: @escaping (_ finished: String?) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
completionHandler("finished") // tell the caller that this has completed
}
}
私はこのようにそれを呼び出します。それの代わりに10秒待っている。それは自動的に行を印刷します。
print("We have completed function)")
知っているもの:
上記のコードは私の実際のコードはこれです試験例です。
func GoToPage(completionHandler: @escaping (_ finished: String?) -> Void) {
self.webView.evaluateJavaScript("document.getElementById('results').getElementsByClassName('page')[0].getElementsByClassName('name')[0].innerText"){ (value, error) in
if error != nil {
} else {
print(value)
completionHandler("finished")
}
}
}
私はこのようにそれを呼び出す:
self.GoToPage(completionHandler: { finished in
print("We have completed function)")
})
その後、私は1つ1〜2分待ってから、次のように再び同じようにそれを呼び出します。
DispatchQueue.main.asyncAfter(deadline: .now() + 130.0) {
self.GoToPage(completionHandler: { finished in
print("We have completed function")
})
}
これは私にラインをプリントします。コールされるとバットの機能を完璧に終えました。
例:
これは、動作するようになっているとして、それが働いている一緒に
self.GoToPage(completionHandler: { finished in
print("We have completed function)")
NextStep()
})
func NextStep(){
DispatchQueue.main.asyncAfter(deadline: .now() + 130.0) {
self.GoToPage(completionHandler: { finished in
print("We have completed function")
})
}
}
func GoToPage(completionHandler: @escaping (_ finished: String?) -> Void) {
self.webView.evaluateJavaScript("document.getElementById('results').getElementsByClassName('page')[0].getElementsByClassName('name')[0].innerText"){ (value, error) in
if error != nil {
} else {
print(value)
completionHandler("finished")
}
}
}
これは非常に混乱しやすい質問です。あなたは* "それはその機能がすでに" * "の前に完了していることを知っていますか?あなたの問題を示す例を示してください。 – rmaddy
私は質問 – Hunter
を更新しました。何分待ってから「テスト」をもう一度呼びますか? – rmaddy