我可以在SwiftUI中对所有共享数据使用@EnvironmentObject吗?

时间:2020-01-11 04:54:58

标签: swiftui swiftui-environment

@State中有@ObservedObject@EnvironmentObjectSwfitUI绑定,可以在视图和其他对象之间共享数据。每个都有其指定的用法,但是@EnvironmentObject似乎是最强大和最容易使用的。那么,我可以将其用于所有状态变量和共享数据吗?这有什么缺点吗?

1 个答案:

答案 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"
    }
}

即使您不需要它们,也必须直接定义所有需要类型的对象