SuperAPI AI 工具集

swiftdata-inheritance

数据与分析

查看项目

更新于 10-16 01:48

技能介绍

用途:面向使用 SwiftData 的开发者,指导在模型层实现类继承,用于构建具有共享基类属性的层级化模型,并支持跨层级查询与多态关系。

主要能力:说明何时该用继承而非枚举或协议;演示在基类与子类上都标注 @Model;查询基类可返回所有子类实例,用 #Predicate 中的 is 或 as? 筛选特定子类并访问其专有属性;基类上定义的关系自动适用于全部子类;ModelContainer 只需注册基类,子类自动发现。

使用方式:基类加 @Model,子类同样加 @Model 并在初始化器中调用 super.init() 传入全部基类必需属性。查询示例:@Query(filter: #Predicate<Trip> { $0 is BusinessTrip }, sort: \Trip.startDate)。注册示例:let container = try ModelContainer(for: Trip.self, Accommodation.self, Itinerary.self)。运行时用 if let business = trip as? BusinessTrip 访问子类属性;UI 中常用枚举作为过滤器切换全部或指定类型。

决策建议:存在明确 IS-A 关系、子类新增大量独有存储属性、需要同时支持深层与浅层查询、或需要 [Trip] 这样的多态数组时使用继承;仅少数属性差异、可用布尔或枚举区分、想降低迁移复杂度、层级超过两级时避免继承。

常见错误:子类漏加 @Model 导致属性不持久化;层级过深;仅为类型标签而使用继承;忘记调用 super.init();在 ModelContainer 中重复注册子类。另需注意超删字段用 @Attribute(.preserveValueOnDeletion),关系正确使用 inverse 与 deleteRule,层级演进时准备迁移方案。

限制:资料未提供具体性能数据、版本要求、价格与平台信息,暂未提供。