【问题标题】:Can I use @EnvironmentObject in SwiftUI for all shared data?我可以在 SwiftUI 中对所有共享数据使用 @EnvironmentObject 吗?
【发布时间】:2020-01-11 04:54:58
【问题描述】:

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

【问题讨论】:

    标签: swiftui swiftui-environment


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2011-05-12
      • 2019-09-24
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多