2017-09-06 54 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 
相關問題