我有一个包含两个实体的基本列表应用 Folder
和 Item
对于多对多关系,文件夹子类有一个名为 itemsArray()
的函数它返回按 creationDate
排序的数组中的 Items显示UITableView
.
Item
有两个属性称为 date
类型 NSDate
和另一个类型 bool
称为 completed
.我创建了一个函数,我可以在其中将单元格项对象标记为已完成,这会将单元格文本颜色更改为灰色。
有没有办法我也可以按其完成值对其进行排序?例如 completed
true 或 false 的值应分隔所有已完成的项目,然后还按 creationDate
对其进行排序.
最终结果应该是已完成项目位于 UITableView
底部的位置。并按日期顺序以及未完成的项目按日期顺序排列。好像完成的优先级高于日期但仍按 creationDate 排序
这是我当前的函数,带有排序描述符以返回一个数组;
func itemsArray() -> [Item] {
let sortDescriptor = NSSortDescriptor(key: "creationDate", ascending: true)
return checklist.sortedArrayUsingDescriptors([sortDescriptor]) as! [Item]
}
PS:我尝试了一些变通方法,例如将日期标记为已完成更新使其位于底部。这将已完成的项目与未完成的项目分开。但是,当取消标记该项目时,它仍保留在底部,这也不是一个好的长期解决方案,因为我可能想将排序更改为按字母顺序和完成。
最佳答案
您可以将另一个 NSSortDescriptor
添加到函数中:
func itemsArray() -> [Item] {
let sortByCompleted = NSSortDescriptor(key: "completed", ascending: true)
let sortByCreationDate = NSSortDescriptor(key: "creationDate", ascending: true)
return checklist.sortedArrayUsingDescriptors([sortByCompleted, sortByCreationDate]) as! [Item]
}
玩 ascending
值以首先获得 true
或 false
。或者 Swifty 的做事方式:
func itemsArray() -> [Item] {
return checklist.sort {
if $0.completed == $1.completed {
return $0.creationDate < $1.creationDate
}
return $0.completed < $1.completed
}
}
关于ios - 按多个键值对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277844/