排序SwiftyJSON结果

时间:2016-02-13 15:47:31

标签: ios swift swifty-json

我正在使用SwiftyJSON填充一个工作正常的tableview,但我很难找到一种排序数据的方法。我已经放了我的代码,因为我觉得有一种更好的方式来存储和显示数据,就像我将它放入每个json标签的单独数组一样,这使得排序变得困难。非常新的快速,所以帮助表示赞赏。我可以在使用它之前对json结果进行排序,或者可能有更好的存储方式吗?

我想根据打印到表格视图的时间对下面的内容进行排序,就像它刚按顺序打印一样。

示例json:

[
  {
    "name": "John Doe",
    "time": 13683
  },
  {
    "name": "Dave Smith",
    "time": 20683
  },
  {
    "name": "Craig David",
    "time": 200
  }
]

当前方法(无排序):

// Global variables
var tableName = [String]()
var tableTime = [String]()

func getJSON(){
    // Removed all the code here to get the JSON 

    let json = JSON(data: result!)

    dispatch_async(dispatch_get_main_queue(), {
        for item in json.arrayValue {
            if item["name"].stringValue != "" {
                self.tableName.append(item["name"].stringValue )
                self.tableTime.append(item["time"].stringValue)
            }
        }
        dispatch_async(dispatch_get_main_queue(),{
            self.tableView.reloadData()
        })
    })
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableName.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
    UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as!TableViewCell
        // Configure the cell...

        cell.name.text = tableName[indexPath.row]
        cell.time.text = tableTime[indexPath.row]

        return cell

    }  
}

1 个答案:

答案 0 :(得分:3)

使用自定义结构作为数据模型

struct Data {
    var name : String
    var time : String
}

然后你只有一个数组要排序

// Global variables
var dataSource = [Data]()

func getJSON(){
    // Removed all the code here to get the JSON 

    let json = JSON(data: result!)
    for item in json.arrayValue {
        let name = item["name"].stringValue
        if !name.isEmpty {
            self.dataSource.append(Data(name:name, time:item["time"].stringValue))
        }
    }
    self.dataSource.sortInPlace{ $0.name < $1.name}
    dispatch_async(dispatch_get_main_queue(),{
        self.tableView.reloadData()
    })
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
    UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as!TableViewCell
        // Configure the cell...

        let data = dataSource[indexPath.row]
        cell.name.text = data.name
        cell.time.text = data.time

        return cell

    }  
}