SwiftUI_属性装饰器

关键词
- @ObservableObject / @Published
- @EnvironmentObject
- @State
- @Binding
- @Environment
@ObservableObject / @Published
@ObservedObject的用处和@State非常相似,从名字看来它是来修饰一个对象的,这个对象可以给多个独立的View使用。如果你用@ObservedObject来修饰一个对象,那么那个对象必须要实现ObservableObject协议,然后用@Published修饰对象里属性,表示这个属性是需要被SwiftUI监听的
@EnvironmentObject
@EnvironmentObject修饰器是针对全局环境的。通过它,我们可以避免在初始View时创建ObservableObject, 而是从环境中获取ObservableObject@EnvironmentObject的工作方式是在Environment查找需要的实例
@State
-
通过使用
@State修饰器我们可以关联出View的状态.SwiftUI将会把使用过@State修饰器的属性存储到一个特殊的内存区域,并且这个区域和View struct是隔离的. 当@State装饰过的属性发生了变化,SwiftUI会根据新的属性值重新创建视图 -
创建具有初始值的变量
@State private var isPlaying: Bool = false
@Binding
- 有时候我们会把一个视图的属性传至子节点中,但是又不能直接的传递给子节点,因为在
Swift中值的传递形式是值类型传递方式,也就是传递给子节点的是一个拷贝过的值。但是通过@Binding修饰器修饰后,属性变成了一个引用类型,传递变成了引用传递,这样父子视图的状态就能关联起来 - 在传递属性是使用
$来传递
@Environment
- 通过
@Environment修饰的属性,我们开一个监听系统级别信息的变换,这个例子里一旦Calendar, Locale, ColorScheme发生了变换,我们定义的CalendarView就会刷新
struct CalendarView: View {@Environment(\\.calendar) var calendar: Calendar@Environment(\\.locale) var locale: Locale@Environment(\\.colorScheme) var colorScheme: ColorSchemevar body: some View {return Text(locale.identifier)}
}


