如何在Swift中对从JSON服务器文件读取的帖子进行排序 [英] How to sort posts read from JSON server file in Swift

查看:106
本文介绍了如何在Swift中对从JSON服务器文件读取的帖子进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对从服务器上的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()
    }
}

很显然,如果日期的格式可以按字母顺序排序,则可以执行上述操作.我选择了格式不易排序的格式,以说明NSDateFormattersortedArrayUsingComparator

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆