我有一个基本列表应用程序,其中有两个实体Folder
和Item
具有多对多关系,文件夹子类有一个名为itemsArray()
的函数,它返回项目在creationDate
的排序数组中显示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:我尝试了一些解决方法,例如标记为已完成更新日期,因此它位于底部。这将已完成的项目与未完成的项目分开。但是当将项目取消标记时,它仍然位于底部,这也不是一个好的长期解决方案,因为我可能希望将排序更改为按字母顺序排列并完成。
答案 0 :(得分:3)
您可以在函数中添加另一个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
获取func itemsArray() -> [Item] {
return checklist.sort {
if $0.completed == $1.completed {
return $0.creationDate < $1.creationDate
}
return $0.completed < $1.completed
}
}
。或者Swifty的做事方式:
DATATABLE 1