【发布时间】:2021-02-06 15:14:20
【问题描述】:
我正在尝试从位于 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…"))
}
}
-
首先,构建失败是因为它无法使用实例成员 viewModel,因为属性初始化程序在 'self' 可用之前运行。
-
如果我使用惰性 var 页面,它会在 rootView 中接受 viewModel,但会在 viewControllers: pages 处抛出错误,它不能对不可变值使用变异 getter:'self' 是不可变的
在这种情况下,有没有办法将 viewModel 传递给 rootView,以便我可以从 MainView 中的视图访问 Textfield?
【问题讨论】: