【问题标题】:Assign property values together in SwiftUI view?在 SwiftUI 视图中一起分配属性值?
【发布时间】:2020-09-15 20:27:34
【问题描述】:

我正在尝试在视图中将属性绑定在一起,但找不到更好的专门针对它的东西。这就是我正在做的:

struct ContentView: View {
    @ObservedObject var model: MyModel
    @State var selectedID: Int

    var body: some View {
        Picker("Choose", selection: $selectedID) {
              Text("Abc").tag(0)
              Text("Def").tag(1)
              Text("Ghi").tag(2)
        }
        .onChange(of: model.item?.selectedID) {
            selectedID = $0
        }
    }
}

有没有更好的方法将属性绑定在一起?

【问题讨论】:

  • 您可以通过将其设置为Published 属性来直接使用viewModel 中的selectedID。因此,您可以在选择器中使用 viewModel.selectedID。当它更新时,它会更新你的模型对象(应该是 ObservableObject),这将导致触发 body 属性的重绘。
  • 你可以这样做......但这违背了单一事实来源的原则
  • 我试图保持单向流,而不是让视图也更新模型

标签: swift swiftui combine


【解决方案1】:

如果是关于单向流,那么我在提供的快照中看到的唯一更改是制作类似的类型。其他一切正常。

struct ContentView: View {
    @ObservedObject var model: MyModel
    @State var selectedID: Int?          // << make optional as well !!

    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多