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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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"
    

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

【讨论】:

以上是关于我可以在 SwiftUI 中对所有共享数据使用 @EnvironmentObject 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui 如何在 foreach 循环中对整行使用 Tap Gesture

使用 Core Data 提供的数据(在 SwiftUI 中)并与另一个视图共享

SwiftUI之如何使用@EnvironmentObject在视图之间共享数据

SwiftUI 中对成员“索引”的错误引用不明确

SwiftUI 在视图之间共享模型数据

SwiftUI - 将核心数据导出到 CSV 文件 - 无法遍历实体