SwiftUIビュー、構造体メンバーでクロージャを初期化すると、保存されているすべてのプロパティが初期化される前に「self」が使用されます<

ダキアフローレア

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ