【发布时间】:2017-12-16 01:56:13
【问题描述】:
我需要对 JSON 对象数组进行排序。
但需要从字面意思翻译成数字意思。
例如
对象[“状态”]
“新”= 1
“打开”=2
“关闭”= 3
/// 我这里需要翻译一下
var sortedOrders = orders.sort { $0["status"].doubleValue < $1["status"].doubleValue }
【问题讨论】:
标签: swift
我需要对 JSON 对象数组进行排序。
但需要从字面意思翻译成数字意思。
例如
对象[“状态”]
“新”= 1
“打开”=2
“关闭”= 3
/// 我这里需要翻译一下
var sortedOrders = orders.sort { $0["status"].doubleValue < $1["status"].doubleValue }
【问题讨论】:
标签: swift
你可以用枚举来做到这一点。
enum Status: Int {
case new = 1
case open = 2
case closed = 3
case unknown = 99
init(string: String) {
switch string {
case "new", "New": self = .new
case "open", "Open": self = .open
case "closed", "Closed": self = .closed
default:
self = .unknown
}
}
}
要使用枚举,你可以这样初始化:
var myStatus = Status(string: object["status"])
并像这样使用它:
print(myStatus) // prints "new"
print(myStatus.rawValue) // prints "1"
编辑:由于枚举具有 Int 的基础类型,为了完成您的排序,您可以直接比较结果状态(感谢这个问题 https://stackoverflow.com/a/27871946/1718685):
var sortedOrders = orders.sort { Status(string: $0["status"]) < Status(string: $1["status"]) }
【讨论】:
这是一种方法:
let statuses = [ "New", "Open", "Closed" ]
var sortedOrders = orders.sort { (statuses.index(of: $0["status"] ?? "") ?? 99) < (statuses.index(of: $1["status"] ?? "") ?? 99) }
这将确定statuses 数组中每个状态的索引。 99 将用于未知或缺失状态,因此任何未知状态都将显示在列表末尾。
【讨论】: