我如何对 SwiftUI 视图进行建模

主要观点:作者定义 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
阅读 16
0 条评论