ios - 从 Firebase 查询创建 TableView (iOS、Swift)

标签 ios swift uitableview firebase firebase-realtime-database

我正在尝试实现一个搜索栏,以便根据搜索查询填充表格 View 。我只是在这里寻找用户名。

数据结构:

"Users"
  -"UID"
    -"Username"

我有一个查询运行在搜索栏中输入的文本。我可以很好地打印搜索结果,所以我知道他们会回来。但是,我无法从查询闭包中拆分数据,也不知道该怎么做

我尝试构建一个内部数组,然后将外部数组设置为它,但它始终包含零值。我知道我的 for 循环正在运行并且我知道正在返回值。他们只是没有被保存。

        self.filteredNameList = []
    let searchText = searchText.lowercased()
    let userQuery = ref.queryOrdered(byChild: "username").queryStarting(atValue: searchText)

    userQuery.observeSingleEvent(of: .value, with: { (snapshot) in
        for snap in snapshot.children {
            let userSnap = snap as! FIRDataSnapshot
            let userDict = userSnap.value as! [String: AnyObject]
            let name = userDict["username"] as! String
            self.filteredNameList.append(name)
        }
        self.tableView.reloadData()
        print("Inside closure: \(self.filteredNameList)")
    })
    print("Outside closure: \(self.filteredNameList)")
}

我该怎么办?谢谢 - 基南

最佳答案

这是一个经过测试的例子

给定一个 Firebase 结构

users
  uid_0
    name: "bill"
  uid_1
    name: "leroy"
  uid_2
    name: "frank"
  uid_3
    name: "leon"

我们想返回所有以'le'开头的节点并将它们存储在一个数组中

var namesArray = [String]() //note this is stored outside the function so other
                            //functions can access it.

func getSomeLe() {
  self.namesArray = [] //init it any time this func is called.
  let usersRef = ref.child("users")
  let queryRef = usersRef.queryOrdered(byChild: "name").queryStarting(atValue: "le")

    queryRef.observeSingleEvent(of: .value, with: { (snapshot) in

      for snap in snapshot.children {
          let userSnap = snap as! FIRDataSnapshot
          let uid = userSnap.key
          let userDict = userSnap.value as! [String:AnyObject]
          let name = userDict["name"] as! String
          self.namesArray.append(name)
      }
      print(self.namesArray)
  })
}

将数据存入数组并打印

["乐华","莱昂"]

关于ios - 从 Firebase 查询创建 TableView (iOS、Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41642690/

相关文章:

ios - 使用 GTMOAuth2ViewControllerTouch 进​​行身份验证时执行 moments.insert

swift - 两个 Date 对象之间的所有日期 (Swift)

ios - 根据textView的长度更改自定义单元格的高度

ios - 核心数据关系多对一

iphone - 我们可以随时在 iPhone 中启动设置屏幕以启用 GPS 吗?

ios - NSSearchPathForDirectoriesInDomains 在模拟器上工作但不在设备上工作

ios - AudioKit.renderToFile AKClipPlayer 同步问题。渲染文件与第一个剪辑位置不同步并且也被截断

swift - case 在 if-case 中是如何工作的

ios - TableView 中嵌套的 collectionView

iphone - 应用程序崩溃,没有异常或崩溃日志