イベントの参加者のリストを取得したいと考えています。イベントノードには、従業員のID#だけがリストされています。私が達成したいのは、従業員ノードからそのIDに関連付けられた名前を取得することです。ここに私のdbaseの構造があります。IOS Swift - Firebaseデータベースの異なるノードから値を取得します
events:
uuid:
name: summer festival 2017
site: vegas
participants:
employeeID1: true
employeeID2: true
Employee:
employeeID1:
name: gary
department: video production
、ここでは私のコードです
@IBAction func downloadButtonAction(_ sender: UIButton) {
ref.child("events").child(eventKeyLabel.text!).child("participants").observeSingleEvent(of: .value, with: {(snapshot) in
// get the dictionary from the snapshot
if let participantsDict = snapshot.value as? [String : AnyObject] {
for each in participantsDict {
let employeeIDNum = each.key
let employeeName = self.getName(forUID: employeeIDNum)
self.employeeID.append(employeeIDNum)
self.name.append(employeeName)
}
print(self.employeeID)
print(self.name)
}
}) // End observeSingleEvent
}
func getName(forUID userID: String) -> String{
var empName = ""
ref.child("Employee").child(userID).observe(DataEventType.value, with: { (snapshot) in
if let value = snapshot.value as? NSDictionary {
empName = (value["name"] as? String)!
}
})
return empName
}
結果:
["0001", "0002", "0003", "0004"]
["", "", "", ""]
FULL CODE:
@IBActionのFUNCのdownloadButtonAction(_差出人:UIButton){
ref.child("events").child(eventKeyLabel.text!).child("participants").observeSingleEvent(of: .value, with: {(snapshot) in
// get the dictionary from the snapshot
if let participantsDict = snapshot.value as? [String : AnyObject] {
for each in participantsDict {
let employeeIDNum = each.key
self.getName(forUID: employeeIDNum) { empName in
self.name.append(empName)
print(empName)
}
self.employeeID.append(employeeIDNum)
}
print(self.employeeID)
print(self.name)
}
}) // End observeSingleEvent
}
FUNC用のgetName(forUIDユーザーID:文字列は、コールバック:@escaping(文字列) - >ボイド){
ref.child("Employee").child(userID).observe(DataEventType.value, with: { (snapshot) in
if let value = snapshot.value as? NSDictionary {
print(value)
if let empName = value["name"] as? String{
callback(empName)
}
}
})
}
それは従業員名を返しません。助けてください。ありがとうございました!
empName =(value ["name"]?Stringの後にprint(empName)を追加して確認してください!ここにempNameが存在するかどうかを調べるgetName関数内の文 – 3stud1ant3
こんにちは、お返事ありがとうございます。私はそれを試して、それは名前を返したが、名前を印刷した後にクラッシュする。それは印刷されますが返されません – TSM
私の答えを確認してください、あなたが問題に直面した場合は、助けを参照してくださいコメントで尋ねてください – 3stud1ant3