ios - 在执行下一行代码之前等待两个异步完成函数完成

标签 ios swift firebase-realtime-database grand-central-dispatch completionhandler

我有两个函数:func Females_NonChat()func males_NonChat() 我想等他们两个都完成后再执行viewdidload中的print语句。我需要另一个完成处理程序来完成吗?

使用的那些函数是用于从在线数据库请求信息的 firebase 完成处理程序...

override func viewDidLoad() {
    super.viewDidLoad()
    func Females_NonChat()
    func males_NonChat()

    print("finished executing both asynchronous functions")
}

func Females_NonChat(){
    Anon_Ref.child("Chatting").child("female").observeSingleEventOfType(.Value, withBlock: {(snapshot) in
        if let FemInChatting = snapshot.value as? [String : String] {
            print("executing")
        }
    })
}

func males_NonChat(){
    Anon_Ref.child("Chatting").child("male").observeSingleEventOfType(.Value, withBlock: {(snapshot) in
        print("executing")
    })
}

最佳答案

通常你会使用一个调度组,在每个异步方法之前进入组,在每个异步方法完成后离开组,然后在所有“进入”调用都匹配到相应的“离开”时设置组通知调用:

override func viewDidLoad() {
    super.viewDidLoad()

    let group = dispatch_group_create()

    dispatch_group_enter(group)
    Females_NonChat() {
        dispatch_group_leave(group)
    }

    dispatch_group_enter(group)
    males_NonChat() {
        dispatch_group_leave(group)
    }

    dispatch_group_notify(group, dispatch_get_main_queue()) { 
        print("finished executing both asynchronous functions")
    }
}

func Females_NonChat(completionHandler: () -> ()) {
    Anon_Ref.child("Chatting").child("female").observeSingleEventOfType(.Value) { snapshot in
        if let FemInChatting = snapshot.value as? [String : String] {
            print("executing")
        }
        completionHandler()
    }
}

func males_NonChat(completionHandler: () -> ()) {
    Anon_Ref.child("Chatting").child("male").observeSingleEventOfType(.Value) { snapshot in
        print("executing")
        completionHandler()
    }
}

关于ios - 在执行下一行代码之前等待两个异步完成函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175156/

相关文章:

javascript - 如何限制将空值发送到 Firebase

java - Android:检查Firebase数据库中是否存在数据列表

ios - NSPredicate 搜索出现 NSDate 错误

javascript - 如何为 iOS/Android 创建 Web View ?

iphone - UIViewController 类在 viewDidLoad 中做了什么?

ios - 找不到类型的初始值设定项

ios - 从结构中删除项目(Swift)

android - 如何使用 android 更改我的数据库 firebase 的多个子节点

ios - Xcode - 框架的多个目标 - 同名?

java - SHA256 : different output in Swift and Java?