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…"))
}
}
首先,构建失败,因为它不能使用实例成员 viewModel 作为 属性 初始化程序 运行 before 'self'可用。
如果我使用 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)
}
}
}
我正在尝试从位于 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 作为 属性 初始化程序 运行 before 'self'可用。
如果我使用 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)
}
}
}