【问题标题】:swift - Function that fetches and appends Firebase values returns an empty stringswift - 获取和附加 Firebase 值的函数返回一个空字符串
【发布时间】:2023-03-31 10:00:02
【问题描述】:

我正在尝试创建一个函数,该函数在 Firebase 中获取给定用户 UID 的类别子键,将它们附加到一个数组中,然后最后将它们连接成一个长字符串。在observeSingleEvent 函数完成并且返回值为空之前,一切正常。这是我的代码:

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 在运行该函数后似乎失去了它的值,但我不知道如何提取该值。

【问题讨论】:

    标签: arrays swift function firebase


    【解决方案1】:

    问题

    observeSingleEvent(of:with:)是一个异步操作,也就是说它执行完函数后可以稍后返回。这就是为什么在你的情况下你总是得到一个空字符串作为返回值

    解决方案

    因此,在您的情况下,您可以像这样创建完成处理程序:

    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)
      })
    }
    

    然后像这样调用你的函数:

    fetchBuddyInfo(category: categoryString, buddyId: buddyId) { (buddyInfoString) in
      // do whatever you want with your buddyInfoString
    }
    

    【讨论】:

    • 完美,很高兴能帮到你!
    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多