1 模型数据
2 分钟阅读
原文链接: https://developer.apple.com/documentation/swiftui/model-data
1 模型数据
管理驱动应用界面的数据。
概述
SwiftUI 提供了一种声明式的用户界面设计方式。当你组合视图层级时,也同时指明了各个视图的数据依赖。当数据发生变化时——无论是外部事件引起的,还是用户执行某个操作引起的——SwiftUI 都会自动更新界面中受影响的部分。因此,框架会自动完成视图控制器传统上所做的大部分工作。

框架提供了状态变量和绑定等工具,用来把应用的数据连接到用户界面。这些工具有助于你为应用中的每一份数据维护单一数据源,部分原因在于它们减少了你需要编写的胶水逻辑。请选择最适合你手头任务的工具:
- 通过把值类型包装为 State() 属性,在视图内部本地管理临时的界面状态。
- 用 Binding 属性包装器共享对某个数据源(例如本地状态)的引用。
- 把 Observable() 宏应用到模型数据类型上,从而在视图中连接并观察引用类型的模型数据。用 State() 属性在视图中直接实例化可观察的模型数据类型。用 Environment 属性包装器把可观察的模型数据共享给层级中的其他视图,而无需传递引用。
创建与共享视图状态
- 管理用户界面状态 —— 把视图特有的数据封装在应用的视图层级内,让你的视图可复用。
- State() —— 创建一个可以读写由 SwiftUI 管理的值的属性。
- State(initialValue:) —— 创建一个带初始值、可以读写由 SwiftUI 管理的值的属性。
- State(wrappedValue:) —— 创建一个带被包装值、可以读写由 SwiftUI 管理的值的属性。
- State —— 可以读写由 SwiftUI 管理的值的属性包装器类型。
- Bindable —— 支持为可观察对象的可变属性创建绑定的属性包装器类型。
- Binding —— 可以读写由某个数据源拥有的值的属性包装器类型。
创建模型数据
- 在应用中管理模型数据 —— 在应用的数据模型与视图之间建立连接。
- 从 Observable Object 协议迁移到 Observable 宏 —— 更新你已有的应用,以利用 Swift 中 Observation 的好处。
- Observable() —— 定义并实现 Observable 协议的遵循性。
- 监控应用中的数据变化 —— 使用可观察对象在应用的用户界面中显示数据变化。
- StateObject —— 实例化可观察对象的属性包装器类型。
- ObservedObject —— 订阅可观察对象、并在该对象变化时使视图失效的属性包装器类型。
- ObservableObject —— 带有发布者、在对象变化之前发出事件的对象类型。
响应数据变化
- onChange(of:initial:_:) —— 为该视图添加修饰符,在某个特定值变化时触发一个动作。
- onReceive(_:perform:) —— 添加当该视图检测到给定发布者发出的数据时要执行的动作。
在整个应用中分发模型数据
- environmentObject(_:) —— 为视图层级提供一个可观察对象。
- environmentObject(_:) —— 为视图子层级提供一个
ObservableObject。 - EnvironmentObject —— 由父视图或祖先视图提供的、针对可观察对象的属性包装器类型。
管理动态数据
- DynamicProperty —— 用于更新视图外部属性的存储变量的接口。