【发布时间】:2017-11-27 17:44:16
【问题描述】:
我正在尝试轻松地按不同的属性值对自定义结构数组进行排序。
struct Customer: Comparable, Equatable {
var name: String
var isActive: Bool
var outstandingAmount: Int
var customerGroup: String
}
var customerlist: [Customer] // This is downloaded from our backend.
当用户选择各种图标时,我希望能够按所有字段值对 UI 中的 customerlist 数组进行排序。
我尝试了一些方法来使用 switch 语句对其进行排序 - 但是我被告知正确的方法是使用排序描述符(它似乎是基于 Objective-C 的,意味着我需要将我的数组转换为一个 NSArray。)当我尝试使用本机 Swift 结构的这种方法时,我不断收到错误。
允许用户使用 Swift 对上述数组进行排序的最佳方式是什么?
例如:下面看起来很冗长!
func sortCustomers(sortField:ColumnOrder, targetArray:[Customer]) -> [Customer] { //Column Order is the enum where I have specified the different possible sort orders
var result = [Customer]()
switch sortField {
case .name:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.name > cust1.name
})
case .isActive:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.isActive > cust1.isActive
})
case .outstandingAmount:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.outstandingAmount > cust1.outstandingAmount
})
case .customerGroup:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.customerGroup > cust1.customerGroup
})
}
return result
}
【问题讨论】:
-
您可以使用位置参数而不是给它们命名来简化闭包(例如,案例 1:
targetArray.sorted { $0.name > $0.name }) -
我认为排序描述符是正确的方法。 - 但似乎没有工作
标签: arrays swift sorting nssortdescriptor