swift - Function that fetches and appends Firebase values returns an empty string
我正在尝试创建一个函数,该函数可以在Firebase中获取给定用户UID的类别子项的键,将它们附加到数组中,然后最终将它们连接成一个长字符串。 一切运行良好,直到observeSingleEvent函数完成并且返回值为空。 这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | let referenceDatabase = FIRDatabase.database().reference() func fetchBuddyInfo(category: String, buddyId: String) -> String { var buddyInterestsArray = [String]() var buddyInterests = String() referenceDatabase.child("Users").child(buddyId).child(category).observeSingleEvent(of: .value, with: { (categorySnap) in for categoryItems in categorySnap.children.allObjects as! [FIRDataSnapshot] { buddyInterestsArray.append(categoryItems.key) } buddyInterests = buddyInterestsArray.joined(separator:",") }) return buddyInterests } |
我认为这与observeSingleEvent函数的嵌套范围有关,因为buddyInterests在运行该函数后似乎会丢失其值,但是我不知道如何提取该值。
问题
解
因此,在您的情况下,您可以创建如下的完成处理程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | func fetchBuddyInfo(category: String, buddyId: String, completion: @escaping (String) -> ()) { var buddyInterestsArray = [String]() var buddyInterests = String() referenceDatabase.child("Users").child(buddyId).child(category).observeSingleEvent(of: .value, with: { (categorySnap) in for categoryItems in categorySnap.children.allObjects as! [FIRDataSnapshot] { buddyInterestsArray.append(categoryItems.key) } buddyInterests = buddyInterestsArray.joined(separator:",") completion(buddyInterests) }) } |
然后像这样调用您的函数:
1 2 3 | fetchBuddyInfo(category: categoryString, buddyId: buddyId) { (buddyInfoString) in // do whatever you want with your buddyInfoString } |