如何检查两个异步任务是否成功完成

时间:2017-04-12 07:25:24

标签: swift swift3

在函数中实现此流程图的最佳和最简单的方法是什么? 现在我正在使用两个调度组,但我需要检查它们是否已完成,而不仅仅是在它们完成时。

如果完成,那么:

  • friends数组将有元素
  • 昵称数组将包含元素

Flowchart

注意:FB是Facebook,FIR是Firebase数据库

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:0)

您可以像这样在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
}

}

}

fetchFBfriendsfetchFIRNickNames是负责从Facebook和Firebase获取数据的函数。