我有两个函数: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/