@State
中有@ObservedObject
,@EnvironmentObject
和SwfitUI
绑定,可以在视图和其他对象之间共享数据。每个都有其指定的用法,但是@EnvironmentObject
似乎是最强大和最容易使用的。那么,我可以将其用于所有状态变量和共享数据吗?这有什么缺点吗?
答案 0 :(得分:0)
首先,@EnvironmentObject
用于课程。因此,如果您要绑定诸如Int之类的原始类型,则只能使用Binding
。
其次,我认为当您尝试定义一个以上的同一类型@EnvironmentObject
时,会引起一些问题。因此,当您可以使用Binding
时-应该这样做。那只是我的爱好。
class SomeClass: ObservableObject{
@Published var value: Int
init(value: Int){
self.value = value
}
}
struct ContentView: View {
@State var one: SomeClass = SomeClass(value: 1)
@State var two: SomeClass = SomeClass(value: 2)
var body: some View {
Adss().environmentObject(one).environmentObject(two)
}
}
struct Adss: View{
@EnvironmentObject var two: SomeClass
var body: some View{
Text("there must be two: \(two.value)")//prints "1"
}
}
即使您不需要它们,也必须直接定义所有需要类型的对象