You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftData布尔字段排序报错,如何让已完成任务排在列表底部?

问题解决:SwiftData @Query排序布尔字段报错

报错原因

直接使用SortDescriptor(\TodoTask.isDone)时,Swift无法找到匹配的初始化器——对于Bool类型的属性,必须显式指定排序顺序(即使使用默认规则),否则会触发「No exact matches in call to initializer」错误。

正确写法

要实现isDone == true的任务排在列表底部,只需给Bool字段的SortDescriptor明确指定排序顺序即可。结合你的日期排序需求,最终代码如下:

@Query(sort: [
    SortDescriptor(\TodoTask.expectedOn, order: .reverse),
    SortDescriptor(\TodoTask.isDone, order: .forward)
]) var todoTasks: [TodoTask]

逻辑说明

Bool类型的比较规则是false < true,使用.forward排序顺序时,未完成的任务(isDone = false)会被排在前面,已完成的任务(isDone = true)自然落在列表底部,完全符合你的需求。显式传入order参数后,初始化器就能正确匹配,报错问题即可解决。

内容的提问来源于stack exchange,提问作者Alloys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:45:17