您现在的位置是:首页 >技术交流 >SwiftUI_属性装饰器网站首页技术交流
SwiftUI_属性装饰器
简介SwiftUI_属性装饰器
@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: ColorScheme
var body: some View {
return Text(locale.identifier)
}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。