我问了另一个类似于这个的问题,但我会尝试重新措辞,以便清楚地说清楚我正在尝试做什么。我目前有一个JSON文件,如下所示:有一个顶级对象,从该对象有一个对象数组,每个对象包含字符串和整数。我想从这些对象中获取某些字符串值,我可以使用它来显示在UITableView中,我看到的唯一方法是使用这个.append函数,当你只检查数组附加一次时这很好也许每周几次,但我希望每次调用func时数组都会显示最新版本。
到目前为止,我已经尝试了许多不同的方法,以便将每个对象中包含的Name字符串转换为数组,方法是在swift中使用我名为NameList的数组。这样做会导致程序在将每个名称附加到数组中时停止。我的最后一个问题得到了做一个plist的建议,但我认为因为我并不清楚我到底遇到了什么问题。因此,再次总结一下,我只想将所有字符串值转换为可由tableview调用的数组。反正有没有每次附加数组而只是让json的字符串直接进入tableview?我目前的代码是:
func updateArr() {
let path = NSBundle.mainBundle().pathForResource("CardList", ofType: "json")
let jsonData = NSData(contentsOfFile: path!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: nil)
let json = JSON(data: jsonData!)
for (key, subJson) in json["array"] {
if let Name = subJson["Name"].string {
if let Class = subJson["Class"].number {
if Class == Int(1) {
cardNameList.append(Name)
println(cardNameList)
}
}
}
}
}
答案 0 :(得分:1)
将json对象的值转换为定义的值可以像
一样me
答案 1 :(得分:0)
很抱歉没有继续回答其他帖子中的评论。 我再次建议使用属性列表文件。
您似乎拥有一系列带有两个键name
和Class
的词典,
所以plist结构看起来像
<dict>
<key>array</key>
<array>
<dict>
<key>name</key>
<string>Alpha</string>
<key>Class</key>
<integer>1</integer>
</dict>
<dict>
<key>name</key>
<string>Beta</string>
<key>Class</key>
<integer>2</integer>
</dict>
<array>
</dict>
然后您可以使用
轻松过滤和映射数据if let cardArray = plistDict["array"] {
let names = cardArray.filter {$0["Class"] == 1} .map {$0["name"]! }
}
plistDict是plist文件的反序列化内容