swiftUI中的观察者系统有两套:
1、基于swift宏的Observation
2、旧的ObservableObject
官方迁移说明
新的Observation
优点:
Tracking optionals and collections of objects, which isn’t possible when using
Observable Object
.Using existing data flow primitives like
State
andEnvironment
instead of object-based equivalents such asState Object
andEnvironment Object
.Updating views based on changes to the observable properties that a view’s
body
reads instead of any property changes that occur to an observable object, which can help improve your app’s performance.
两套导致各种ObservableObject
、ObservedObject
、Observation
各种关键字,看的人只犯迷糊,大概记录一下各个关键字的用法和含义。
ObservableObject
中:class类型的model要实现ObservableObject
协议,同时需要在被监听的属性前需要添加@Published
,作为环境变量被导入时需要用@StateObject
修饰,读取环境变量时需要使用@EnvironmentObject
修饰,在view中绑定使用时,需要使用@ObservedObject
修饰model。
Observation
中:只需要@Observation
修饰class即可,不需要额外标注属性需要添加监听,作为环境变量被导入时需要使用@State
修饰,读取环境变量时需要使用@Environment(Type.self)
修饰,在view中绑定使用时,需要使用@Bindable
修饰model。。