使用JSON进行Swift数组排序

时间:2017-02-08 17:25:24

标签: arrays json swift sorting

数据: 尝试从JSON获取数据

包含在Playground上运行Swift的代码

 var roadWayStatusArray = [AnyObject]()


let url = URL(string: "http://od.moi.gov.tw/data/api/pbs")
let data = try? Data(contentsOf: url!)
let json = try? JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
if let results = json as? [String : AnyObject] {
    if let result = results["result"] as? [[String : AnyObject]] {
        for data in result {
            let happendate = data["happendate"] as? String
            roadWayStatusArray.append(data as AnyObject!)
        }
    }
}

我尝试使用roadWayStatusArray.sort(by: >),但Xcode报告了我Ambiguous reference member '>'

如何按hapendatehappentime

创建排序

1 个答案:

答案 0 :(得分:1)

您的roadWayStatusArrayAnyObject的数组。 >没有定义AnyObject运算符。

roadWayStatusArray中的对象实际上是字典,如下所示:

{
    UID = "10602090007-0";
    areaNm = "\U4e2d\U5c71\U9ad8\U901f\U516c\U8def-\U570b\U9053\Uff11\U865f";
    comment = "\U5317\U4e0a.\U4e2d\U58e2\U670d\U52d9\U5340 \U51fa\U53e3\U531d\U9053\U4e2d \U53f3\U5074 \U5c0f\U5ba2\U8eca\U505c\U653e\Uff0c\U99d5\U99db\U7591\U4f3c\U7761\U8457\U4e86";
    direction = "\U5317\U4e0a";
    happendate = "2017-02-09";
    happentime = "01:08:00.0000000";
    modDttm = "2017-02-09 01:15:43.603";
    region = N;
    road = "";
    roadtype = "\U5176\U4ed6";
    srcdetail = "\U71b1\U5fc3\U807d\U773e";
    x1 = "121.73558";
    y1 = "25.12263";
}

您需要使用确定排序顺序的闭包来调用sort(by:)。例如,如果您想按happendate然后happentime排序:

roadWayStatusArray.sort(by: { (lhsAny, rhsAny) -> Bool in
    let lhs = lhsAny as? [String: AnyObject]
    let rhs = lhsAny as? [String: AnyObject]
    let lhsKey = (lhs?["happendate"] as? String ?? "", lhs?["happentime"] as? String ?? "")
    let rhsKey = (rhs?["happendate"] as? String ?? "", rhs?["happentime"] as? String ?? "")
    return lhsKey < rhsKey
})