首页 > 解决方案 > 使用新的@StateObject 将模型传递给多个视图?

问题描述

如果您想在多个视图之间传递模型,您可以多次使用@StateObject(参见下面的示例)以便每个视图都可以修改对象吗?我很欣赏使用@EnvironmentObject 会更好地完成这件事,但只是想了解这个新的属性包装器在这种情况下是如何工作的。

// MARK: - MODEL
class Model: ObservableObject {
   @Published var temperature = 27.5
}

.

// MARK: - APP.SWIFT
@main
struct SwiftUI_DataFlow_005App: App {
    @ObservedObject var model = Model()
    var body: some Scene {
        WindowGroup {
            ContentView(model: model)
        }
    }
}

.

// MARK: - CONTENT VIEW
struct ContentView: View {
    @StateObject var model: Model
    var body: some View {
        VStack {
            Text("\(model.temperature)")
            AnotherView(model: model)
        }
    }
}

// MARK: - ANOTHER VIEW
struct AnotherView: View {
    @StateObject var model: Model
    var body: some View {
        Text("\(model.temperature)")
    }
}

标签: swiftui

解决方案


@StateObject是事实的来源,所以它必须在一个地方创建,所以(示意图如您提供的屏幕截图,但不是要修改的代码)

in App >
  @StateObject private var model = Model()

  ...

  ContentView().environmentObject(model)

  ...

in ContentView >

  @EnvironmentObject var model: Model

  ...

in AnotherView >

  @EnvironmentObject var model: Model

推荐阅读