假设我们有一个名为orderFile的自定义类,该类包含三个属性。
class orderFile {
var name = String()
var id = Int()
var status = String()
}
其中很多都存储在数组中
var aOrders : Array = []
var aOrder = orderFile()
aOrder.name = "Order 1"
aOrder.id = 101
aOrder.status = "closed"
aOrders.append(aOrder)
var aOrder = orderFile()
aOrder.name = "Order 2"
aOrder.id = 101
aOrder.status = "open"
aOrders.append(aOrder)
var aOrder = orderFile()
aOrder.name = "Order 2"
aOrder.id = 101
aOrder.status = "cancelled"
aOrders.append(aOrder)
var aOrder = orderFile()
aOrder.name = "Order 2"
aOrder.id = 101
aOrder.status = "confirmed"
aOrders.append(aOrder)
问题是:如何根据打开,确认,关闭和取消的状态对其进行排序?
答案 0 :(得分:4)
在排序函数中进行比较时,您必须提供一个能产生适当排序的值。
例如:
extension orderFile
{
var statusSortOrder: Int
{ return ["open","confirmed","closed","cancelled"].index(of: status) ?? 0 }
}
let sortedOrders = aOrders.sorted{$0.statusSortOrder < $1. statusSortOrder}
答案 1 :(得分:1)
在你的代码中,你应该创建一个数组,在每个aOrder定义时用aOrders.append(aOrder)存储每个aOrder。
然后使用以下代码对其进行排序,请重新 this 。
aOrders.sorted({ $0.status > $1.status })
答案 2 :(得分:0)
swift 3的答案如下:
升序:
aOrders = aOrders.sorted(by:
{(first: orderFile, second: orderFile) -> Bool in
first.status > second.status
}
)
降序:
aOrders = aOrders.sorted(by:
{(first: orderFile, second: orderFile) -> Bool in
first.status < second.status
}
)