下面通过一个样例演示如何对数组元素进行排序。数组内为自定义用户对象,最终要实现按用户名排序,数据如下:
var userList = [UserInfo]() userList.append(UserInfo(name: "张三", phone: "4234")) userList.append(UserInfo(name: "李四", phone: "1212")) userList.append(UserInfo(name: "航歌", phone: "3525"))
方法1 (针对上面数组进行降序排列)
userList.sortInPlace(onSort) func onSort(s1:UserInfo, s2:UserInfo) -> Bool{ return s1.name > s2.name }
方法2
userList.sortInPlace({$0.name > $1.name})
根据上面的方法项目中的物流页面显示 按照时间排序 正确显示
1、网络解析的数据 字典
JSOnDictory>>>>>>>>>>>>>>>>>>>>>>>>>> { "LogisticCode" : "412123771581", "Traces" : [ { "AcceptTime" : "2016-09-19 19:24:51", "AcceptStation" : "北京大兴城区 的 康建朋18610592094 已收件" }, { "AcceptTime" : "2016-09-19 19:26:00", "AcceptStation" : "快件离开 北京大兴城区 已发往 北京" }, { "AcceptTime" : "2016-09-19 22:41:05", "AcceptStation" : "快件已到达 北京市内部" }, { "AcceptTime" : "2016-09-20 00:01:27", "AcceptStation" : "快件离开 北京市内部 已发往 北京北苑" }, { "AcceptTime" : "2016-09-20 06:38:52", "AcceptStation" : "快件已到达 北京北苑" }, { "AcceptTime" : "2016-09-20 07:55:59", "AcceptStation" : "北京北苑 的 王赛威18001223683 正在派件" }, { "AcceptTime" : "2016-09-20 12:55:12", "AcceptStation" : "北京北苑的派件已签收,感谢您使用中通快递!" } ], "Success" : true, "ShipperCode" : "ZTO", "State" : "3", "EBusinessID" : "1265535" }
根据需求只需要 物流信息部分 取其中的key对应的value值 作为一个数组
排序前————————traces>>>>>>>>>>>>>>>>>>>>>>>>>>Optional([{ "AcceptTime" : "2016-09-19 19:24:51", "AcceptStation" : "北京大兴城区 的 康建朋18610592094 已收件" }, { "AcceptTime" : "2016-09-19 19:26:00", "AcceptStation" : "快件离开 北京大兴城区 已发往 北京" }, { "AcceptTime" : "2016-09-19 22:41:05", "AcceptStation" : "快件已到达 北京市内部" }, { "AcceptTime" : "2016-09-20 00:01:27", "AcceptStation" : "快件离开 北京市内部 已发往 北京北苑" }, { "AcceptTime" : "2016-09-20 06:38:52", "AcceptStation" : "快件已到达 北京北苑" }, { "AcceptTime" : "2016-09-20 07:55:59", "AcceptStation" : "北京北苑 的 王赛威18001223683 正在派件" }, { "AcceptTime" : "2016-09-20 12:55:12", "AcceptStation" : "北京北苑的派件已签收,感谢您使用中通快递!" }])
排序后——————————traces>>>>>>>>>>>>>>>>>>>>>>>>>>Optional([{ "AcceptTime" : "2016-09-20 12:55:12", "AcceptStation" : "北京北苑的派件已签收,感谢您使用中通快递!" }, { "AcceptTime" : "2016-09-20 07:55:59", "AcceptStation" : "北京北苑 的 王赛威18001223683 正在派件" }, { "AcceptTime" : "2016-09-20 06:38:52", "AcceptStation" : "快件已到达 北京北苑" }, { "AcceptTime" : "2016-09-20 00:01:27", "AcceptStation" : "快件离开 北京市内部 已发往 北京北苑" }, { "AcceptTime" : "2016-09-19 22:41:05", "AcceptStation" : "快件已到达 北京市内部" }, { "AcceptTime" : "2016-09-19 19:26:00", "AcceptStation" : "快件离开 北京大兴城区 已发往 北京" }, { "AcceptTime" : "2016-09-19 19:24:51", "AcceptStation" : "北京大兴城区 的 康建朋18610592094 已收件" }])
具体解析代码为:
Alamofire.request(.POST, ReqURL, parameters: parameters )
.responseJSON { response in
print(Request)
print("response>>>>>>>>>>>>>>>>>>>>>>",response)
// 有错误就打印错误,没有就解析数据
if let Error = response.result.error
{
print(Error)
}
else if let jsonresult = response.result.value {
// 用 SwiftyJSON 解析数据
let JSOnDictory = JSON(jsonresult)
print("JSOnDictory>>>>>>>>>>>>>>>>>>>>>>>>>>",JSOnDictory)
var traces = JSOnDictory["Traces"].array
print("排序前————————traces>>>>>>>>>>>>>>>>>>>>>>>>>>\(traces)")
traces?.sortInPlace({$0["AcceptTime"] > $1["AcceptTime"]})
// userList.sortInPlace({$0.name > $1.name})
print("排序后——————————traces>>>>>>>>>>>>>>>>>>>>>>>>>>\(traces)")
for dataDic in traces! {
let model = itemsModel()
model.postInfo = dataDic["AcceptStation"].string ?? ""
model.datetime = dataDic["AcceptTime"].string ?? ""
print(model.postInfo)
print(model.datetime)
self.dataArray.append(model)
print(self.dataArray)
}
self.tableView.reloadData()
// // 以升序排列为例,原数组可改变
// array.sortInPlace(<)
// // 以降序排列为例,原数组不可改变
// newArray = array.sort(>)
}
}
//数组排序关键代码
traces?.sortInPlace({$0["AcceptTime"] > $1["AcceptTime"]})