[String:String]与NSDictionary

我在Swift中与字典的斗争故事

嘿! 欢迎来到我2019年的第一篇技术博客文章! 😄

所以我有一个从2018年开始从事的项目。 它涉及Firebase,我将其用作项目的数据库。 我正在挑战自己做一个Twitter克隆iOS应用程序。

我现在在哪里

所以现在,我有了一些固定的东西。

我已经注册,登录,标签栏,撰写屏幕以及数据。 好吧,一些数据。 它看起来像这样。

我接下来要做的是在时间轴或供稿中显示该推文。 因此,我创建了一个UITableViewController屏幕。

所以这是有趣的地方。

问题

自然,我会这样做。

给定上面所示的数据库结构,这将起作用。 考虑到每个快照都由一个单独的tweet id作为键,并且值是[String : String]的字典,该字典是[“tweet_content” : “some stuff”]

除了它没有用。 显然,Firebase更改了当您通过snapshot.children进行迭代时返回的数据类型。

经过一些谷歌搜索,我发现您应该使用snapshot.children.allObjects并将其FIRDataSnapshotFIRDataSnapshot数组。

因此,遵循这些思路。

您可能会说,由于我现在使用数组,因此不得不更改一些代码。

这可行。 它实际上返回了tweet_content值,但这与我描述代码的方式不完全相同。 这是获取价值的有效方法,但这种怪异的方法,或者至少不是我习惯的方法。

也许它不像我预期的那样可读。

如果您想知道什么是dict?.values输出,就是这个, [“tweet_content” = “Hello there”]

因此,我试图找到另一种方法。

我终于找到了解决方案

因此,当我在学校时仍想弄清楚JSON的时候,我回头看了看我可信赖的旧代码。

我看到我使用了NSDictionary而不是[String : String]

所以我尝试了。

瞧,它确实起作用了。 这是代码。

这行得通,而且可读性强得多。

尽管事后看来,我可以不必指定allObjects并将其强制转换为FIRDataSnapshot数组。

也许Swift的[String : String]NSDictionary的实现略有不同?

我仍然可以重构它。 😜但这就是这篇博文!

谢谢阅读!