如何在Swift中进行嵌套字典

时间:2016-05-31 21:25:31

标签: ios swift dictionary

作为Swift的初学者,我正在努力解决最简单的事情:(我已经尝试过很多方法在字典中创建字典,但总是失败。

原因是我要填写一个包含10个项目的表格。每个项目都有标题,网址,综合浏览量和唯一身份用户。 String,string,int,int。我希望能够通过使用IndexPath.row读取数据并填充tablecell,我希望能够根据来自带有json内容的api的输入每隔5秒更新一次数据。

我在Playground尝试并最终得到:

var topArticleDetails:[String:AnyObject] = ["title":"","url":"","uniqueUsers":0,"events":0]
var topArticles:[Int:NSDictionary] = [0:topArticleDetails]

topArticleDetails["title"] = "Varden - Nyheter"
topArticleDetails["url"] = "http://www.varden.no/nyheter"
topArticleDetails["uniqueUsers"] = 50
topArticleDetails["events"] = 100

topArticles[1] = topArticleDetails

它似乎工作正常,但当我将其添加到我的ViewController时,我收到错误实例成员'topArticleDetails'不能用于'ViewController'类型

关闭但没有雪茄..

我该如何解决这个问题?也许有一种比我现在尝试的更好的方式。目前它有点工作,但没有嵌套字典,我最终得到了四个单独的数组:

var topArticlesTitle = [String]()
var topArticlesURL = [String]()
var topArticlesEvents = [Int]()
var topArticlesUniqueUsers = [Int]()

我很确定必须有更好的方法。

>>更新<<

除了下面提供的解决方案,我发现了另一个。这很简单,我很惭愧,但我想这是同时学习Swift和OOP的一部分。如果我删除了数据,我试图在声明它们时输入变量并将它们保持为空它就像魅力一样。

var topArticleDetails = [String:AnyObject]()
var topArticles = [Int:NSDictionary]()

2 个答案:

答案 0 :(得分:2)

您可以使用和struct数组,而不是在字典中使用字典,例如:

struct Article {
    var title: String?
    var url: String?
    var: events: Int?
    var uniqueUsers: Int?
}

var topArticles = [Article]()

比字典中的字典更容易保留,因为它很容易改变你的模型。

答案 1 :(得分:1)

要回答关于嵌套词典的问题(我会选择pableiros的答案,但不要滥用词典,结构更好)你可以这样声明:

var test = [Int: [String: AnyObject]]()

要转换JSON,您可以使用NSJSONSerialization类:

try NSJSONSerialization.JSONObjectWithData(your_encoded_json, options: []) as! [Int: [String: AnyObject]]