如何推送详细信息页面并删除 swiftUI 中所有以前的导航链接?

How can I push a detailpage and remove all previous navigationlinks in swiftUI?

我有一个应用程序,其中有多个带有文本字段的屏幕可以创建一些新对象。当用户在最后一个屏幕上选择“创建”时,将执行 API 调用以创建新对象。

从那里我想推送新创建对象的详细信息页面,并且(当视图不再可见时)删除所有带有文本字段的屏幕(因为这不再相关,只会引起混乱。幸运的是,在详细信息页面之前应该只保留一个屏幕。

在 UIKit 中,这将通过在 navigationController 上执行 push,然后在 [=14] 中编辑 navigationControllerviewControllers 数组来执行=] 的新屏幕。

如果我是正确的,则无法在 SwiftUI 中编辑视图 NavigationView,那么我如何在 SwiftUI 中执行此操作?

我通过向 NavigationView 添加一个 id,然后在它应该重置时将其设置为视图模型中的另一个 id 来解决它。

像这样:

struct MyView: View {
    @StateObject var viewModel = ViewModel()

    var body: some View {
        NavigationView {
            // ...
        }
        .id(viewModel.id)
    }
}

在视图模型中:

class ViewModel: ObservableObject {
    @Published var id = UUID().uuidString

    func reset() {
        id = UUID().uuidString
    }
}

这会重置 NavigationView,因为 Swift 认为这是一个不同的视图,因为 ID 已更改。