Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI视图,使用结构成员初始化闭包(>';自我';在初始化所有存储属性之前使用<;_Swift_Initialization_Swiftui_Closures - Fatal编程技术网

SwiftUI视图,使用结构成员初始化闭包(>';自我';在初始化所有存储属性之前使用<;

SwiftUI视图,使用结构成员初始化闭包(>';自我';在初始化所有存储属性之前使用<;,swift,initialization,swiftui,closures,Swift,Initialization,Swiftui,Closures,我想初始化一个onTap闭包,其中应该调用viewmodel中的方法。此函数将传递给另一个类,该类将调用它。我不知道如何初始化它,因为它不允许我使用self,如果我尝试对viewmodel使用弱引用,它会说: 在初始化所有存储属性之前使用“self” 代码如下: 尝试以下操作(viewModel是引用类型,因此可以将其作为临时变量进行操作) 尝试以下操作(viewModel是引用类型,因此可以将其作为临时变量进行操作) 在init中的onTabItemTap中,您在init完成之前访问viewM

我想初始化一个onTap闭包,其中应该调用viewmodel中的方法。此函数将传递给另一个类,该类将调用它。我不知道如何初始化它,因为它不允许我使用self,如果我尝试对viewmodel使用弱引用,它会说:

在初始化所有存储属性之前使用“self” 代码如下:

尝试以下操作(viewModel是引用类型,因此可以将其作为临时变量进行操作)

尝试以下操作(viewModel是引用类型,因此可以将其作为临时变量进行操作)


在init中的onTabItemTap中,您在init完成之前访问viewModel,这是您无法做到的。您可以使用基于viewModel的onTabItemTap的计算属性。在init中的onTabItemTap中,您在init完成之前访问viewModel,这是您无法做到的。您可以使用基于viewModel的onTabItemTap的computed属性。
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)
        }
    }
}
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)
    }
}