首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Firebase查询创建表视图(iOS、Swift)

从Firebase查询创建表视图(iOS、Swift)
EN

Stack Overflow用户
提问于 2017-01-13 20:09:20
回答 1查看 895关注 0票数 0

我正在尝试实现一个搜索栏,以便基于搜索查询填充一个表视图。我只是在这里寻找用户名。

数据结构:

代码语言:javascript
代码运行次数:0
运行
复制
"Users"
  -"UID"
    -"Username"

我在搜索栏中输入了一个文本的查询。我可以把搜索结果打印出来,所以我知道他们会回来的。但是,我不能从查询闭包中分离数据,并且不知道该做什么

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

代码语言:javascript
代码运行次数:0
运行
复制
        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)")
}

我该怎么办?谢谢-基南

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-13 20:53:56

下面是一个经过测试的例子

给出一个火基结构

代码语言:javascript
代码运行次数:0
运行
复制
users
  uid_0
    name: "bill"
  uid_1
    name: "leroy"
  uid_2
    name: "frank"
  uid_3
    name: "leon"

我们希望返回以“le”开头的所有节点,并将它们存储在一个数组中。

代码语言:javascript
代码运行次数:0
运行
复制
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)
  })
}

将数据存储在数组中并打印

“勒罗伊”,“里昂”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41642690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档