【问题标题】:Structuring Firebase model for tableview sections为 tableview 部分构建 Firebase 模型
【发布时间】:2018-05-22 14:35:39
【问题描述】:

我在 firebase 中有一个数据结构,我在 tableview 上显示该数据。我正在从 firebase 获取数据。表格视图部分是硬编码的,如动机、成功等。。解析这些数据的最佳方法是什么,以便当我在 firebase 控制台中添加一个新部分时,它会在 tableview 上添加该部分和该部分的数据,而无需我对这些部分进行硬编码?任何正确方向的帮助将不胜感激,请阅读 firebase 文档,但似乎无法弄清楚。

数据结构

    {
  "categories" : {
    "motivation" : {
      "one" : {
        "name" : "Bob",
        "title" : "Get up stand up"
      },
      "two" : {
        "name" : "Arsitotle",
        "title" : "Great philosopher"
      }
    },
    "success" : {
      "one" : {
        "name" : "Les",
        "title" : "You're great"
      },
      "three" : {
        "name" : "Bob",
        "title" : "One love"
      },
      "two" : {
        "name" : "Wayne",
        "title" : "You will be great"
      }
    }
  }
}

** 检索数据**

ref.child("categories/motivation").observe(.childAdded, with: {(snapshot:DataSnapshot) in

            if let values = snapshot.value as? [String:String] {

                self.motivationDictionary.insert(values, at: 0)
            }
        })
    }


ref.child("categories/success").observe(.childAdded, with: {(snapshot:DataSnapshot) in

                if let values = snapshot.value as? [String:String] {

                    self.successDictionary.insert(values, at: 0)
                }
            })
        }

我知道这不是最好的方法,但它确实有效。有点多余,但我是 firebase 和数据库的新手。

【问题讨论】:

    标签: swift uitableview firebase firebase-realtime-database


    【解决方案1】:

    因此,您拥有固定数量的字典,其中每个字典都有一个名称(motivationDictionary、successDictionary)。

    相反,您可以拥有一个字典字典(就像在您的数据结构中一样),这样顶部字典包含类别,并且在每个键下您都有该类别的值字典,即新的 self.categories["motivation"] 是相同的如旧的self.motivationDictionary 等等。

    这应该可行,但仅对原始字典和字符串进行操作并不是最佳做法。这种方法可能是其他一些语言(如 Lisps)的典型方法,但不是 Swift 的方式。

    在 Swift 中,您应该定义模型类,并将 DataSnapshot 解析为这些类的实例。例如,如果您从:

    struct Item {
        let name: String
        let title: String
    }
    
    class Category {
        let name: String = ""
        var items: [String: Item] = [:]
    }
    
    class TableDataModel {
        var sections: [Category] = []
    }
    

    然后在您的observe 中,您可以填充您的 TableDataModel,然后从模型中重新加载表格。这样 Swift 编译器可以帮助你更多地确保你的程序是正确的,并且代码更加清晰。

    【讨论】:

    • 感谢您的回复,我需要使用字典词典。如何从字典中获取类别?看来我还得硬编码。
    • 您可以通过在字典上编写for循环来获取每个类别:stackoverflow.com/questions/24111627/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多