SKILL.md
readonly只读
name
swiftdata-pro
description
编写、审查和改进使用现代API和最佳实践的SwiftData代码。在阅读、编写或审查使用SwiftData的项目时使用。
编写和审查SwiftData代码,确保正确性、现代API使用以及符合项目约定。仅报告真正的问题——不要吹毛求疵或捏造问题。
审查流程:
- 使用
references/core-rules.md检查核心SwiftData问题。 - 使用
references/predicates.md检查谓词是否安全且受支持。 - 如果项目使用CloudKit,使用
references/cloudkit.md检查CloudKit特定约束。 - 如果项目目标为iOS 18+,使用
references/indexing.md检查索引机会。 - 如果项目目标为iOS 26+,使用
references/class-inheritance.md检查类继承模式。
如果只做部分工作,只加载相关的参考文件。
核心指令
- 目标Swift 6.2或更高版本,使用现代Swift并发。
- 用户强烈倾向于全面使用SwiftData。除非是SwiftData无法解决的功能,否则不要建议使用Core Data功能。
- 未经询问,不要引入第三方框架。
- 使用一致的项目结构,文件夹布局由应用功能决定。
输出格式
如果用户要求审查,按文件组织发现。对于每个问题:
- 说明文件和相关行号。
- 指出违反的规则。
- 显示简短的修复前后代码对比。
跳过没有问题的文件。最后以优先级排序总结最需要优先进行的影响最大的更改。
如果用户要求编写或改进代码,遵循上述相同规则,但直接进行更改,而不是返回发现报告。
示例输出:
Destination.swift
第8行:为关系添加显式删除规则。
// 之前
var sights: [Sight]
// 之后
@Relationship(deleteRule: .cascade, inverse: \Sight.destination) var sights: [Sight]
第22行:不要在谓词中使用 isEmpty == false——它会在运行时崩溃。请改用 !。
// 之前
#Predicate<Destination> { $0.sights.isEmpty == false }
// 之后
#Predicate<Destination> { !$0.sights.isEmpty }
DestinationListView.swift
第5行:@Query 只能在SwiftUI视图中使用。
// 之前
class DestinationStore {
@Query var destinations: [Destination]
}
// 之后
class DestinationStore {
var modelContext: ModelContext
func fetchDestinations() throws -> [Destination] {
try modelContext.fetch(FetchDescriptor<Destination>())
}
}
总结
- 数据丢失(高): Destination.swift第8行缺少删除规则,当目的地被删除时,sights将成为孤儿。
- 崩溃(高): 第22行的
isEmpty == false会在运行时崩溃——请改用!isEmpty。 - 行为不正确(高): DestinationListView.swift第5行的
@Query仅在SwiftUI视图中有效。
示例结束。
参考
references/core-rules.md- 自动保存、关系、删除规则、属性限制和FetchDescriptor优化。references/predicates.md- 支持的谓词操作、运行时崩溃的危险模式以及不支持的方法。references/cloudkit.md- CloudKit特定约束,包括唯一性、可选性和最终一致性。references/indexing.md- iOS 18+的数据库索引,包括单属性和复合属性索引。references/class-inheritance.md- iOS 26+的模型子类化,包括@available要求、模式设置和谓词过滤。






