主要观点:作者定义 SwiftUI 的 ViewModel 的方法深受 Paul Hudson 相关帖子启发,在相关视图的扩展中定义class ViewModel,并将其命名为Model,每个视图有其Model实例,有用的属性包装器会提升到视图中,实践中用@Query处理 SwiftData 时易出现问题,子视图通过Model获取数据,Model扩展在单独文件中便于测试和编辑,视图文件不包含在测试目标中,此方法对 Swift 开发有积极影响,鼓励将复杂逻辑推到Model中。
关键信息:
- 受 Paul Hudson 启发,在视图扩展中定义
Model类。 - 每个视图有
Model实例,如@State private var model: Model =.init()。 - 实用属性包装器提升到视图,如
@Binding等。 - 实践中用
@Query处理 SwiftData 易出错。 - 子视图通过
PersonView(person: model.person)等获取数据。 Model扩展在单独文件,便于测试和编辑。- 视图文件不包含在测试目标中,测试文件用空结构体。
重要细节: - 可将视图所需函数或变量放入
Model。 - 子视图有自己的
Model类,通过init方法接收所需参数创建。 - 作者认为此方法有助于测试,将复杂逻辑推到
Model,分离应用布局和数据获取。 - 示例中
.background(model.active?.blue :.orange)可根据情况推到Model。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。