等待两个异步完成函数完成,然后再执行下一行代码

sli*_*boy 1 grand-central-dispatch ios completionhandler swift firebase-realtime-database

我有两个功能: func Females_NonChat()func males_NonChat() 我想等他们都在viewDidLoad中执行打印语句之前完成.我需要另一个完成处理程序才能完成吗?

使用的函数是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")
    })
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 6

通常,您使用调度组,在每个异步方法之前输入组,在每个异步方法完成后离开组,然后在所有"enter"调用与相应的"leave"调用匹配时设置组通知:

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()
    }
}
Run Code Online (Sandbox Code Playgroud)