【问题标题】:How to bind an ObservableObject?如何绑定 ObservableObject?
【发布时间】:2020-10-21 06:58:04
【问题描述】:

我在主视图上有一个像这样的 ObservableObject。

class GlobalVariables: ObservableObject {
  @Published var showContactForm:Bool? = false
}

我在主视图上有一个模态表,如下所示

.sheet(isPresented: XXXXX, onDismiss: {


}) {
  ContactForm()
}

XXXXX 通常类似于$showContactForm,但showContactFormGlobalVariables 中的已发布对象。

如何绑定它?我在XXXXX 上放什么?

【问题讨论】:

  • 您将拥有一个属性,例如@StateObject var gv = GlobalVariables(),然后你会做$gv.showContactForm(尽管我认为Bool对于isPresented必须是非可选的)。如果在视图外实例化,它也可以是@ObservedObject@EnvironmentObject
  • 太棒了,谢谢。请将此推荐作为答案,以便我接受。

标签: swift swiftui


【解决方案1】:

要绑定到可观察对象的属性,您需要在视图中创建一个属性,该属性将保存该对象的一个​​实例并绑定到它,就像使用任何本地 @State@Binding 属性一样:

struct SomeView: View {
  @StateObject var gv = GlobalVariables()

  var body: some View {
     // ...
     .sheet(isPresented: $gv.someCondition) {
        // ...
     }
  }
}

(请记住,isPresented: 需要 Binding<Bool>,因此 someCondition 必须是非可选的 Bool

  • 如果 GlobalVariables 被实例化并归视图所有,则使用 @StateObject
  • 使用@ObservedObject - 如果它在视图之外实例化并且实例通过init 传递
  • 使用@EnvironmentObject - 与@ObservedObject 相同,但实例通过.environmentObject 传递

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 2022-11-20
    • 1970-01-01
    • 2020-02-14
    • 2021-07-26
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多