【问题标题】:Request result structure firebasedatabase Swift请求结果结构 firebasedatabase Swift
【发布时间】:2021-03-15 00:08:21
【问题描述】:

希望像在 java 中那样快速检索自定义类的值,我使用 Firebasedecoder。 工作正常,但我需要以下结构

{

username = uiii;
email = test@rom.com

..}

如果我发出像.queryOrdered(ByCHild:email).queryEqual("uiii") 这样的有序请求,我会得到前一个节点的请求:

{

"hjhj"= {
username = uiii;
email = test@rom.com

..} }

寻找一种方法来删除不必要的值或具有正确的 snap 结构。

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。

    要获取结果中的单个节点,您需要遍历 snapshot.children,如 listening for value events on a list of children 上的 Firebase 文档中所示。

    另见:

    【讨论】:

    【解决方案2】:

    简而言之,如果您在同一级别有额外的数据并且导致decodeFirebase 崩溃,您仍然可以使用它:

    let value = snapshot.value 
    let modifiedValue:NSMutableDictionary = (value as AnyObject).mutableCopy() as! MutableDictionary
    

    然后您可以按键删除元素:modifiedValue.removeObject(forKey: test) 然后应用解码。

    【讨论】:

    • 没有理由在 Swift 中使用 NSMutable... 集合类型。
    • @vadaian:我什至会说:根本没有理由不使用 NSMutable...
    • 对upvoter(或审查员,如您所见,我忘了感谢您审查我,我的错
    【解决方案3】:

    图片中所有值的自定义类USER

    导入基础 导入 SwiftUI 导入 Firebase 导入 CodableFirebase

    //知道用户ID,用Firebasedecoder清理漂亮的结果

    func cleanResultWithCodebableFirebase(){

          ref.child("3oleg").observeSingleEvent(of: .value, with: { snapshot in
               guard let value = snapshot.value else { return }
               do {
                   let user = try FirebaseDecoder().decode(User.self, from: value)
                   print(user.getUser_id())
                   
               } catch let error {
                   print(error)
               }
           })
    

    }

    不知道 userID 的脏结果

    func customwithdirtylists(){

    让查询 = ref.queryOrdered(byChild: Strings.field_username).queryEqual(toValue: "uiiii") query.observeSingleEvent( of: .value, with: { (snapshot) -> Void in

       for child in snapshot.children {
    
         let childSnapshot = snapshot.childSnapshot(forPath: (child as AnyObject).key)
    
         for grandchild in childSnapshot.children{
             let grandchildSnapshot = childSnapshot.childSnapshot(forPath: (grandchild as AnyObject).key)
             //possible from here to get the key and values of each element of the custom class
    
             
         }
         
    
       }
    

    })

    }

    这是我在两种情况下使用的代码,直接请求或订购时。在 firebase decode 的帮助下直接看不到列表。通过循环重建自定义类的丑陋方式。我相信有更优雅的方法可以做到这一点,特别是当我只需要删除直接结果的一个值以获得干净的结果时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 2012-10-21
      • 2016-04-09
      • 2016-07-17
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多