在函數中實現此流程圖的最佳和最簡單的方法是什麼? 現在我正在使用兩個派遣組,但我需要檢查他們是否都完成了,而不僅僅是當他們完成時。如何檢查兩個異步任務是否成功完成
如果他們這樣做,那麼:
- 朋友陣列將擁有元素
- 暱稱陣列將擁有元素
注:FB是Facebook和FIR是火力地堡數據庫
在函數中實現此流程圖的最佳和最簡單的方法是什麼? 現在我正在使用兩個派遣組,但我需要檢查他們是否都完成了,而不僅僅是當他們完成時。如何檢查兩個異步任務是否成功完成
如果他們這樣做,那麼:
注:FB是Facebook和FIR是火力地堡數據庫
你可以使用DispatchGroup
。嘗試下面的操場;
import UIKit import XCPlayground let dispatchGroup = DispatchGroup.init() for index in 0...4 { dispatchGroup.enter() let random = drand48() let deadline = DispatchTime.now() + random/1000 print("entered \(index)") DispatchQueue.global(qos: .background).asyncAfter(deadline: deadline, execute: { print("leaving \(index)") dispatchGroup.leave() }) } dispatchGroup.notify(queue: .global()) { print("finished all") }
應該類似於
entered 0 leaving 0 entered 1 entered 2 leaving 1 leaving 2 entered 3 leaving 3 entered 4 leaving 4 finished all
因此,如果我然後說,當索引== 0時,我執行Facebook,並且當索引== 1時,我執行Firebase? 從你給出的例子來看,我不需要隨機的,對嗎? –
不,這個想法是說明在開始每個異步任務時將其添加到組中,並在完成時離開。隨機的要點是引入不同的執行時間,並顯示只有在所有異步任務都離開組後纔會調用通知 –
謝謝。您的答案不僅解決了我的問題,而且還清理了我的代碼! –
輸出東西,你可以實現斯威夫特3一樣,這個流程圖。
let fbFriendsArray : [String] = []
let firNickNames :: [String] = []
func flowChart() {
let myGroupOuter = DispatchGroup()
myGroupOuter.enter()
fetchFBfriends(completionHandler: {(isSuccess : Bool) in
myGroupOuter.leave()
})
myGroupOuter.enter()
fetchFIRNickNames(completionHandler: {(isSuccess : Bool) in
myGroupOuter.leave()
})
myGroupOuter.notify(queue: DispatchQueue.main) {
if (fbFriendsArray.isEmpty || firNickNames.isEmpty) {
/// Present Your Error Logic
} else {
/// Fetch Games Logic here
}
}
}
fetchFBfriends
和fetchFIRNickNames
是負責獲得來自Facebook和火力地堡數據的功能。
也許你可以嘗試在GCD中的dispatch_barrier_async或dispatch_group。 – Coollee