我正在尝试在用户键入时查询 firebase 数据库,但我不断收到此错误

Posted

技术标签:

【中文标题】我正在尝试在用户键入时查询 firebase 数据库,但我不断收到此错误【英文标题】:I am trying to query a firebase database in while the user is typing, but I keep getting this error 【发布时间】:2019-04-20 13:25:52 【问题描述】:

所以我发现这段代码可以在用户仍在键入时查询您的数据库,但是代码已经过时并且我一直在更新它,但出现了一个我不知道如何修复的错误。

func findFriends(text: String) -> Void 

    let ref = Database.database().reference()
    ref.child("users").queryOrdered(byChild: "username").queryStarting(atValue: text).queryEnding(atValue: text+"\uf8ff").observe(.value, with:  snapshot in

        let user = User()
        let userArray = [User]()

            for u in snapshot.children
                user.name = u.value!["name"] as? String
        
    )

我在最后一行得到一个错误,它说:

“任何”类型的值没有成员“值”

【问题讨论】:

似乎与this question 中的问题相同,尽管这是一个不同的 swift 版本。 Type 'Any' has no subscript members (firebase)的可能重复 @AndréKool 看起来很相似,但我不确定如何用我的 for 循环来实现它。 【参考方案1】:

snapshot.children 中的元素属于Any 类型,它没有value 属性。要获得value 属性,您需要将u 转换为DataSnapshot

for userSnapshot in snapshot.children
    let userSnapshot = userSnapshot as! DataSnapshot
    guard let dictionary = userSnapshot.value as? [String: Any] else  return 
    user.name = dictionary["name"] as? String

或者,您将演员表放入循环中:

for userSnapshot in in snapshot.children.allObjects as? [DataSnapshot] ?? [] 
    guard let dictionary = userSnapshot.value as? [String: Any] else  return 
    user.name = dictionary["name"] as? String

【讨论】:

我在尝试第一个代码时收到此错误。 " 对成员“价值”的模糊引用"

以上是关于我正在尝试在用户键入时查询 firebase 数据库,但我不断收到此错误的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 实时数据库在查询之间按单词搜索?

firebase swift -- 用户查询

查询Firebase用户以检查数据库中是否存在联系人

如何通过异步调用 uid 从 Firebase 查询数据

共享文本文档,用户可以在其中实时键入 Swift IOS

在 Swift 3 中包含字典的 Firebase 进程子快照