arrays - swift-获取和附加Firebase值的函数返回一个空字符串

标签 arrays swift function firebase

我正在尝试创建一个函数,该函数在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在运行该函数后似乎会丢失其值,但是我不知道如何提取该值。

最佳答案

问题

observeSingleEvent(of:with:)是异步操作,这意味着它可以在执行函数后稍后返回。这就是为什么在您的情况下,您总是得到一个空String作为返回值的原因



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

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
}

关于arrays - swift-获取和附加Firebase值的函数返回一个空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541036/

相关文章:

ios - 如何将单独函数中生成的随机数同步到另一个@IBAction func

function - 在 postgresql 中运行函数抛出运行时错误

将一维字符串复制到二维数组元素中

CSV 到 C 中的数组

c++ - C++ 中的列表数组。指针;/

json - 使用 Swift 从 JSON 中仅提取一些字段

cocoa - 既然 Swift 中没有预处理器,那么用什么来代替 C 宏呢?

复杂声明

c - Strtok 返回错误数据

ios - 在后台获取中使用 URLSession 更新数据