创建一个 swifty-json 字符串数组

Creating an array of swifty-json strings

我问了另一个与这个问题类似的问题,但我会尝试改写它以明确说明我正在尝试做什么。我目前有一个 JSON 文件,分解如下:有一个顶级对象,从该对象有一个对象数组,每个对象包含字符串和整数。我想从这些对象中获取某些字符串值到一个数组中,我可以用它来显示在 UITableView 中,我看到到处都张贴的唯一方法使用这个 .append 函数,当你只检查数组追加一次时,这是很好的也许一周几次,但我希望每次调用 func 时数组都显示最新版本。

到目前为止,我已经尝试了很多不同的方法,以便通过在 swift 中附加一个我称为 NameList 的数组,将每个对象中包含的名称字符串转换为一个数组。这样做会导致程序在将每个名称附加到数组时停止。我的最后一个问题得到了做 plist 的建议,但我认为是因为我不清楚我遇到的问题到底是什么。所以再次总结一下,我只想将所有字符串值转换为一个数组,该数组可以被 tableview 调用。有没有办法做到这一点而不必每次都附加数组,而只是让 json 中的字符串直接转到表视图?我当前的代码是:

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)
                }
            }
        }
    }
}

将 json 对象的值转换为定义的值可以像这样

if let Name:String = subJson["Name"] as! String {
       if let Class:Number = subJson["Class"] as! Number {

       }
}

很抱歉没有继续回答另一个 post 中的评论。 我再次建议使用 属性 列表文件。

您似乎有一个字典数组,其中包含两个键 nameClass, 所以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 {[=11=]["Class"] == 1} .map {[=11=]["name"]! }
}

plistDict为plist文件的反序列​​化内容