2017-09-06 53 views
1

我希望能够通过从存储在我的数据库中的密钥中提取其UID值来列出tableview中的用户。截至目前,代码仅获取数据库中的第一个值,而不是所有的值。这是获取申请人的代码。Firebase Swift 3从一组中获取多个值

func loadApplicants() { 
    let usersRef = ref.child("users") 
    usersRef.observe(.value, with: { (users) in 

     var resultArray = [UserClass]() 

     for user in users.children { 
      let user = UserClass(snapshot: user as! DataSnapshot) 

      if user.uid == self.job.userID { 
       let appRef = self.ref.child("jobs").child(self.job.postID).child("applicants") 
       appRef.queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { (snapshot) in 
        let sValue = snapshot.value 
        resultArray.append(user) 
       }) 
      } 
     } 
    }) { (error) in 
     print(error.localizedDescription) 
    } 
} 

这就是我的数据库看起来像用户的UID存储位置。

jobs 
"Job ID" 
    applicants: 
    -KtLJaQnFMnyI-MDWpys:"8R6ZAojX0FNO7aSd2mm5aQXQFpk1" 
    -KtLLBFU_aVS_xfSpw1k:"GGqjtYvwSwQw9hQCVpF4lHN0kMI3" 

如果我是运行应用程序,它提取UID:“8R6ZAojX0FNO7aSd2mm5aQXQFpk1” 我如何能实现一个for循环或if语句,以确保所有的值取和追加到表视图

我知道在从AuthService调用fetchApplicants之前我需要一个for循环,因为它只是获取一个UID,但我无法确定它会去哪里。

谢谢。

P.S.这是我曾尝试

func loadApplicants() { 
    let jobID = job.postID 
    let appRef = ref.child("jobs").child(jobID!).child("applicants") 
    appRef.queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { (snapshot) in 
     if let applicants = snapshot.value! as? [String:AnyObject] { 
      for (value) in applicants { 
       self.authService.fetchApplicants(applicantID: "\(value!)", completion: { (users) in 
        self.usersArray = users 
        self.tableView.reloadData() 
       }) 
      } 
     } 
    }) 
} 

但输出是:

(key: "-KtLLBFU_aVS_xfSpw1k", value: GGqjtYvwSwQw9hQCVpF4lHN0kMI3) 
(key: "-KtLJaQnFMnyI-MDWpys", value: 8R6ZAojX0FNO7aSd2mm5aQXQFpk1) 

回答

0

需要使用观察,而不是observeSingleEvent

答:

appRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in 
相关问题