如何在SwiftUI中将导航目标作为参数传递?

问题描述

我正在使用类似向导的导航创建SwiftUI应用。我已经构建了一个WizardView,然后在其中嵌入了单个页面。 WizardView应该处理常规内容,例如在美观的框架中显示所有内容显示导航按钮等等。基本上一切看起来都不错,所以我开始研究SwiftUI中导航的工作原理。

这是我最终得到的结果的精简版。问题是,我找不到将nextView从具体页面传递到WizardView结构的可能解决方案。

import SwiftUI

struct WizardView<Content: View>: View {
    
    private let content: () -> Content
    
    private var canNavigateBack: Bool
    private var canNavigateForth: Bool
    
    // Todo
    // How do I pass this as parameter,which has to be optional or some default view,// as the last screen won't have a next one.
    private var nextView = EmptyView()
    
    init(canNavigateBack: Bool? = true,canNavigateForth: Bool? = true,@viewbuilder content: @escaping () -> Content) {
        
        self.canNavigateBack = canNavigateBack!;
        self.canNavigateForth = canNavigateForth!;
        self.content = content
    }

    var body: some View {
        vstack(spacing: 15) {
            content()
            
            HStack {
                // Todo Implement correct back button
                if (canNavigateBack) {
                    NavigationLink(destination: EmptyView()) {
                        Text("Back")
                    }
                }
                
                if (canNavigateBack && canNavigateForth) {
                    Spacer()
                }
            
                // Naviate to next screen
                if (canNavigateForth) {
                    NavigationLink(destination: nextView) {
                        Text("Next")
                    }
                }
            }
        }
        .padding()
    }
}

struct DemoView_Previews: PreviewProvider {
    static var previews: some View {
        vstack {
            /**
             * The usage within the different screens should be something like this
             */
            Divider()
            
            WizardView(canNavigateBack: false) {
                Text("This would be the first screen,without back navigation.")
            }
            
            Divider()

            WizardView() {
                Text("This would be another screen.")
            }

            Divider()
            
            WizardView(canNavigateForth: false) {
                Text("This is the last screen,without next button.")
            }
            
            Divider()
        }
    }
}

我对Swift和SwiftUI还是很陌生,所以也许我只是不了解这里的一些基本概念。

更新

在这里,我发现了至少对我有帮助的东西。 SwiftUI MVVM Coordinator/Router/NavigationLink

我将逐步解决这个问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)