查找函数是否已完成循环firebase

时间:2018-04-24 01:41:03

标签: ios arrays swift firebase firebase-realtime-database

好的,我一直在处理一些我真正需要帮助的事情,所以我在这里。我有一个简单的函数,它通过firebase循环并向数组添加数据。这是问题,我需要知道函数完成循环的位置。老实说,我需要一些帮助来解决这个问题,所以这里有一个例子。

func getUsers() {
 let ref = Database.database.reference()
 if let myAget = self.myAgel {
            ref.child("newUsers").observeSingleEvent(of: .value, with: {(snapshoter) in
                if let valuer = snapshoter.value as? [String : AnyObject] {
                    for (one,_) in valuer {
                       checkCount.append("one")
                        ref.child("users").child(one).child("age").observeSingleEvent(of: .value, with: {(snap) in
                            if let agerti = snap.value as? Int {
                         if myAget - agerti <= 1 && myAget - agerti >= -1 {
                                    print("Add this user")     
                                  }
                            }             
                         })
                       }
                   }
                 print("now do something with those users")
               }
            })
      }
}

**控制台打印:

现在对这些用户做点什么

添加此用户

添加此用户

添加此用户

添加此用户

你可以看到,问题是我想在我检查用户年龄是否接近你之后调用一个函数:+ - 1年。我怎样才能打印出来#34;现在做点什么......&#34;在&#34;添加用户&#34;。非常感谢你!如果你有任何帮助,请回复,我需要任何东西。

1 个答案:

答案 0 :(得分:3)

您可以使用DispatchGroup。在启动每个异步工作单元之前,您需要enter调度组,并且在该单元完成时需要leave。您可以使用notify确定在所有工作完成后执行的闭包。

func getUsers() {
    let ref = Database.database.reference()
    if let myAget = self.myAgel {

        ref.child("newUsers").observeSingleEvent(of: .value, with: {(snapshoter) in
            if let valuer = snapshoter.value as? [String : AnyObject] {
                let dispatchGroup = DispatchGroup()
                for (one,_) in valuer {
                    dispatchGroup.enter()
                    checkCount.append("one")
                    ref.child("users").child(one).child("age").observeSingleEvent(of: .value, with: {(snap) in
                        if let agerti = snap.value as? Int {
                            if myAget - agerti <= 1 && myAget - agerti >= -1 {
                                print("Add this user")     
                            }
                        } 
                        dispatchGroup.leave()        
                     })
                 }
                 dispatchGroup.notify {
                    print("now do something with those users")
                 }
             }

         })
    }
}