在函数中实现此流程图的最佳和最简单方法是什么? 现在我正在使用两个调度组,但我需要检查它们是否都已完成,而不仅仅是它们完成时。
如果他们完成了那么:
注:FB是Facebook,FIR是Firebase数据库
您可以使用
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")
}
应该输出类似于
的东西输入 0 留下 0 输入 1 输入 2 离开 1 离开 2 输入 3 离开 3 输入 4 离开 4 全部完成
假设你想同时加载 3 张图片,并等待它们被下载到屏幕上。
Task {
do {
// Call first function and proceed to next step
async let image_1 = try firstAsyncMethod()
// Call second function and proceed to next step
async let image_2 = try secondAsyncMethod()
// Call function and proceed to next step
async let image_3 = try thirdAsyncMethod()
let images = try await [image_1, image_2, image_3]
// Display images
} catch {
// Handle Error
}
}
你可以像那样在 Swift 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 和 Firebase 获取数据的函数。