@State
修饰的变量是值传递的,所以作用范围在当前视图,变量值变化后会触发相关的View刷新。
@Binding
修饰的变量会变成引用的形式传递,保证持有的值是一致的。
@ObservedObject
和State作用类似,对于变量只是引用,且对象所属的类要遵从ObservableObject
协议,要监视的属性用@Published修饰。其生命周期不由创建它的View所持有,需要开发者自行管理。
@StateObject
与ObservedObject
的区别是生命周期由创建它的View所持有,无需开发者手动管理。
@EnvironmentObject
对所有View可见,因此变量可以在任意View之间传递,调用根视图的environmentObject()
方法传递变量,以便所有的子视图可以访问它。其所属的类同样要遵从ObservableObject
协议。
@Environment
读写环境变量,内置了系统的一些公共变量,也可以自定义。