如何在Swift中对从JSON服务器文件读取的帖子进行排序 [英] How to sort posts read from JSON server file in Swift
问题描述
我想对从服务器上的JSON文件读取的帖子进行排序.
I want to sort the posts I read from JSON file on the server.
我想通过按按钮进行排序,按名称或时间排序
I want to sort via push of a button, sorted by name or time
我的代码
func ReadFromJson()
{
let path="www.xxxxxxxxxxx.com/.json"
let url=NSURL(string: path)
let session=NSURLSession.sharedSession()
let task=session.dataTaskWithURL(url!, completionHandler: { (data, response, err) -> Void in
if (err == nil)
{
let dic =
NSJSONSerialization.JSONObjectWithData(data,
options: NSJSONReadingOptions.AllowFragments, error: nil)
as NSDictionary
self.arr=dic["events"] as? NSArray
self.MyCollection.reloadData()
self.Myind.stopAnimating()
}
})
task.resume()
}
推荐答案
我们需要查看有关events
数组结构的更多详细信息,但是如果您要使用NSArray
,则需要使用许多NSArray
排序方法之一.
We would need to see more detail on the structure of the events
array, but if you're going to use NSArray
, then you'd use one of the many NSArray
sorting methods.
首先,我们假设JSON如下:
First, let's assume that the JSON looked like:
{
"events": [
{
"name": "Storming of the Bastille",
"date": "July 7, 1789"
},
{
"name": "american revolution",
"date": "July 4, 1776"
},
{
"name": "Guy Fawkes Night",
"date": "November 5, 1605"
}
]
}
如果您想按名称对它进行排序,则可以:
If you wanted to sort that by name, you could:
var error: NSError?
if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as? NSDictionary {
if let unsortedEvents = json["events"] as? NSArray {
let descriptor = NSSortDescriptor(key: "name", ascending: true, selector: "caseInsensitiveCompare:")
self.events = unsortedEvents.sortedArrayUsingDescriptors([descriptor])
self.collectionView.reloadData()
self.activityIndicatorView.stopAnimating()
}
}
很显然,如果日期的格式可以按字母顺序排序,则可以执行上述操作.我选择了格式不易排序的格式,以说明NSDateFormatter
和sortedArrayUsingComparator
Clearly, if the dates were in a form that could be sorted alphabetically, you could do something like the above. I picked formats that were not in an easily sorted form, to illustrate a more complicated combination of NSDateFormatter
and sortedArrayUsingComparator
let formatter = NSDateFormatter()
formatter.dateFormat = "MMM d, YYYY"
var error: NSError?
if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as? NSDictionary {
if let unsortedEvents = json["events"] as? NSArray {
self.events = unsortedEvents.sortedArrayUsingComparator() { (obj1, obj2) -> NSComparisonResult in
let event1 = obj1 as NSDictionary
let event2 = obj2 as NSDictionary
let date1 = formatter.dateFromString(event1["date"] as NSString)
let date2 = formatter.dateFromString(event2["date"] as NSString)
return date1!.compare(date2!)
}
self.collectionView.reloadData()
self.activityIndicatorView.stopAnimating()
}
}
这篇关于如何在Swift中对从JSON服务器文件读取的帖子进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!