今回の記事はSwift開発で遅い処理が完了してから処理を行う場合、必要な操作を「DispatchQueue」を使って実装してみます。興味があれば是非参考にしてみて下さい。
処理の後に処理を行う方法ご紹介。〜 DispatchQueue 〜
DispatchQueue.global().async {
print("処理1(時間のかかる処理)")
}
//print("前処理 :" + String(maesyoriflag))
// dataを取得するまで待ちます
wait( { return maesyoriflag == false } ) {
// 取得しました
//print("前処理 :" + String(maesyoriflag))
DispatchQueue.main.asyncAfter(deadline:.now() + 2.0) {
print("処理2")
}
}
//待機用の関数()
func wait(_ waitContinuation: @escaping (()->Bool), compleation: @escaping (()->Void)) {
var wait = waitContinuation()
// 0.01秒周期で待機条件をクリアするまで待ちます。
let semaphore = DispatchSemaphore(value: 0)
DispatchQueue.global().async {
while wait {
DispatchQueue.main.async {
wait = waitContinuation()
semaphore.signal()
}
semaphore.wait()
Thread.sleep(forTimeInterval: 0.01)
}
// 待機条件をクリアしたので通過後の処理を行います。
DispatchQueue.main.async {
compleation()
}
}
}
今回の記事は以上です。他にも多数のSwift関連の記事を記載しているのでサイト内見ていって下さい。
コメント