viewmodelのメソッドを呼び出す必要があるonTapクロージャを初期化したい。この関数は、それを呼び出す別のクラスに渡されます。自己を使用できないため、初期化する方法がわかりませんでした。ビューモデルへの弱い参照を使用しようとすると、次のように表示されます。
保存されているすべてのプロパティが初期化される前に使用される「self」は、次のコードです。
typealias OnTabBarTap = (Tab) -> Void
struct TabScreenView: View {
@State var selectedTab: Tab = .BROWSE
@ObservedObject var viewModel: TabScreenViewModel
var onTabItemTap: OnTabBarTap
init(currentSelectedTab: Tab) {
viewModel = TabScreenViewModel(
input: TabScreenInput(
onStart: PassthroughSubject(),
onTabClick: PassthroughSubject()
)
)
onTabItemTap = {
[viewModel](tab: Tab) -> Void in
viewModel.input.onTabClick.send(tab)
}
}
var body: some View {
NavigationView{
VStack{
CurrentView(currentView: $selectedTab)
BottomTabBarView(tabs: $viewModel.tabs, onTap: onTabItemTap)
}
}
.navigationViewStyle(StackNavigationViewStyle())
.onAppear{
self.viewModel.input.onStart.send(true)
}
}
}
次のことを試してください(viewModelは参照型なので、一時変数として操作できます)
init(currentSelectedTab: Tab) {
let vm = TabScreenViewModel(
input: TabScreenInput(
onStart: PassthroughSubject(),
onTabClick: PassthroughSubject()
)
)
self.viewModel = vm
onTabItemTap = {
[vm](tab: Tab) -> Void in
vm.input.onTabClick.send(tab)
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加