SwiftUI:如何访问 Pageable 中的 ObservedObject?

SwiftUI: How can I access an ObservedObject within a Pageable?

我正在尝试从位于 MainView 的 Pageable 中的子视图访问文本字段:

struct MainView: View {
      var pages = [
        UIHostingController(rootView: FirstView(viewModel: viewModel)), // 1. error (without lazy var pages)
        UIHostingController(rootView: SecondaryView()), 
      ] 

     @StateObject var viewModel = MainViewModel()
     @State var pageIndex = 0
     var body: some View{
         HStack{
              Pageable(pageIndex: $pageIndex, viewControllers: pages) // 2. error (with lazy var pages)
         }
     }
}  
struct FirstView: View {
        @ObservedObject var viewModel = MainViewModel()
        var body: some View{
             NameTextfield(text: $viewModel.name, placeholder: Text("Name…"))
        }
}
  1. 首先,构建失败,因为它不能使用实例成员 viewModel 作为 属性 初始化程序 运行 before 'self'可用。

  2. 如果我使用 lazy var pages 它接受 rootView 中的 viewModel 但在 viewControllers: pages 抛出一个错误,它 cannot use mutating getter on immutable value : 'self' 是不可变的

有没有办法在这种情况下将 viewModel 传递给 rootView,以便我可以从 MainView 中的视图访问 Textfield?

使用init

struct FirstView: View {
    @ObservedObject var viewModel: MainViewModel
    
    var body: some View{
        NameTextfield(text: $viewModel.name, placeholder: Text("Name…"))
    }
}

struct MainView: View {
    
    @StateObject var viewModel = MainViewModel()
    @State var pageIndex = 0
    
    private var pages: [UIViewController] = []
    
    init() { //<---Here
        pages = [UIHostingController(rootView: FirstView(viewModel: viewModel)), UIHostingController(rootView: SecondaryView())]
    }

    var body: some View{
        HStack{
            Pageable(pageIndex: $pageIndex, viewControllers: pages)
        }
    }
}