为tableview部分构建Firebase模型

时间:2018-05-22 14:35:39

标签: swift uitableview firebase firebase-realtime-database

我在firebase中有一个数据结构,我在tableview上显示数据。我从firebase获取数据。 tableview部分是硬编码,如 Motivation,Success等.. 。解析这些数据的最佳方法是什么,这样当我在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和数据库的新手。

1 个答案:

答案 0 :(得分:0)

所以你有一个固定数量的词典,每个词典都有一个名字(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编译器可以帮助您更好地确保程序正确,代码更清晰。