我需要对一组JSON对象进行排序。
但它需要从字面意义翻译成数字意义。
例如
对象[ “状态”]
“新”= 1
“打开”= 2
“已关闭”= 3
///我需要在这里翻译一些
var sortedOrders = orders.sort { $0["status"].doubleValue < $1["status"].doubleValue }
答案 0 :(得分:1)
你可以用枚举来做到这一点。
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"]) }
答案 1 :(得分:0)
这是一种方式:
let statuses = [ "New", "Open", "Closed" ]
var sortedOrders = orders.sort { (statuses.index(of: $0["status"] ?? "") ?? 99) < (statuses.index(of: $1["status"] ?? "") ?? 99) }
这将确定statuses
数组中每个状态的索引。 99将用于未知或缺失的状态,因此任何未知状态都将出现在列表的末尾。