存储字典的数组.迅速



我很难在 swift 中解决这个问题。所以我想填充一个表格视图,其中包含所有电台列表搜索,每个单元格中都有电台名称、流比特率和现在正在播放。我在编程方面也没有太多经验。

 "station_list": {
        "1": {
            "number": 1,
            "sid": "6235",
            "name": "WwW Radio",
            "streams": {
                "stream_format": "9",
                "stream_format_string": ".MP3/.M3U Playlist",
                "stream_bitrate": "5",
                "stream_bitrate_string": "128 kbps",
                "now_playing": "",
                "test_up": 0
            }
        },
        "2": {
            "number": 2,
            "sid": "25755",
            "name": "EKR - Rock Radio 24/7",
            "streams": {
                "stream_format": "9",
                "stream_format_string": ".MP3/.M3U Playlist",
                "stream_bitrate": "3",
                "stream_bitrate_string": "64 kbps",
                "now_playing": "",
                "test_up": 0
            }
        },
        "3": {
            "number": 3,
            "sid": "25965",
            "name": "Classic Rock Radio",
            "streams": {
                "stream_format": "9",
                "stream_format_string": ".MP3/.M3U Playlist",
                "stream_bitrate": "4",
                "stream_bitrate_string": "96 kbps",
                "now_playing": "",
                "test_up": 0
            }
        },

@everyone 即使这是 json,它也不是有效的 json。

如果我是你,我会像这样一步一步地解决这个问题。

  1. 弄清楚表格的输入数据的格式
  2. 查找读取数据的方法
  3. 找到将数据放入结构的方法
  4. 创建表。
  5. 从结构填充表

下面是一些 Swift 中基于读取 JSON 然后用它填充表视图的示例代码。

在其中读取它实际上取决于您拥有的数据类型,如果它是与Apple提供的Quakes示例相同的格式的JSON,则可以快速而肮脏地读取它

readdata()
{
var jsonObject : AnyObject!
var filepath = "(tempDir)JsonFile.dat"
var error: NSError?
var datafilecheck = NSFileManager.defaultManager()
//Check if data file exists
if datafilecheck.fileExistsAtPath(filepath)
{
let jsonData: NSData = NSData(contentsOfFile: filepath, options: .DataReadingMappedIfSafe, error: nil)!
//Check if json object it readable
if let object = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as? NSDictionary {
    cou = object["main"]!.count
    println("number of items in object = (cou)")

    for(var row=0; row < cou; row++)
    {

        // = object["main"]![row]!["Title:"]!! as String
        var number = object["main"]![row]!["number:"]!! as String
        var sid = object["main"]![row]!["sid:"]!! as String
        /*Read it into some type of structure or core data ect here */
    }
    MainTable.reloadData()
}
else {
    println("error")
}
}
else
{
    println("Json data file NOT JSON FILE == nil, from getdict function")
}
}

注意:该示例具有有限的错误检查,并且还需要读取某些内容,如果您的输入中可能有错误,我建议您使用预制框架来读取json

此外,您的表格或类似的东西也需要这两个函数。

//Set Table view number of rows
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
    return datastruct.count
}

//Set Table view cell entries
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn, row: Int) -> NSView? {
    let identifier = tableColumn.identifier
    var cellView = tableView.makeViewWithIdentifier(identifier, owner: self) as NSTableCellView
    if (row < datastruct.count)
    {
        if identifier == "number:"
        {
            cellView.textField!.stringValue = datastruct[row].title
        }
        if identifier == "sid:"
        {
            cellView.textField!.stringValue = datastruct[row].filePath
        }
        return cellView
}
}

您展示的示例显然是 JSON。我真的无法完全理解你在问什么,但我的猜测是你想知道如何将这种相同的数据结构存储在字典数组中。

你在这里实际拥有的是字典字典,但我要猜测顶层的键实际上只是数组索引。所以你会有这样的东西:

[ [ "number" : 3, "sid" : "25965", "name" : "Classic Rock Radio", "streams" : [ "stream_format": "9" ] ] ]

等等。但是,这尖叫着成为模型对象的数组。

我还应该补充一点,如果您已经有 JSON 格式的数据,您可以使用 NSJSONSerialization 的方法将其转换为字典和数组。这将给你 Objective-C 的NSArrayNSDictionary,它们与 Swift 密切相关,但与 Swift 对应物略有不同。

最新更新