前言
SwiftUI与苹果之前的UI框架的区别不仅仅在于如何定义视图和其他UI组件,还在于如何在整个使用它的应用程序中管理视图层级的状态。
SwiftUI没有使用委托、数据源或任何其他在UIKit和AppKit等命令式框架中常见的状态管理模式,而是配备了一些属性包装器,使我们能够准确地声明我们的数据如何被我们的视图观察、渲染和改变。
本周,让我们仔细看看这些属性包装器中的每一个,它们之间的关系,以及它们如何构成SwiftUI整体状态管理系统的不同部分。
属性状态
由于SwiftUI主要是一个UI框架(尽管它也开始获得用于定义更高层次结构(如应用程序和场景)的API),其声明式设计不一定需要影响应用程序的整个模型和数据层——而只是直接绑定到我们各种视图的状态。
例如,假设我们正在开发一个SignupView
,使用户能够通过输入用户名和电子邮件地址在应用程序中注册一个新账户。我们将使用这两个值形成一个用户模型,并将其传递给一个闭包:
struct SignupView: