首页 > 解决方案 > 我可以在 SwiftUI 中对所有共享数据使用 @EnvironmentObject 吗?

问题描述

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

标签: swiftuiswiftui-environment

解决方案


首先,@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"
    }
}

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


推荐阅读