作为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]()
答案 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]]