步进器使用绑定结构崩溃视图中的变量?

Stepper using Variables from Binding Structs Crashes View?

我正在使用来自前一个视图的@Binding 在视图之间传递一个对象。结构设计如下:

struct Topping: Identifiable {
    let name: String
    let price: Double
    var amount: Int
    let id = UUID()
}
// Ex. Topping(name: "Cheese", price: 3.00, amount: 0)

struct ToppingList: Identifiable {
    let name: String
    var list: [Topping]
    var id: String {
        name+"menu\(menu.indices)"
    }
}
// Ex. ToppingList(name: "Cheeses", menu: [Topping(...), Topping(...)])

struct MenuItem: Identifiable {
    let name: String
    let description: String
    let size: [String]
    let image: String
    let price: [Double]
    var toppings: [ToppingList]
    var id: String {
        "_"+name
    }
}
// Ex. MenuItem(...toppings: [Topping(name: "Cheese", price: 3.00, amount: 0), Topping(name: "Pepperoni", price: 3.00, amount: 0)])

我将浇头列表传递给视图,并希望通过步进器增加或减少浇头的数量(每个独特的浇头)。出现的问题是当发生这种情况时,视图崩溃到我的主页。

视图的代码分为 2 个 - 一个用于在表单中显示步进器的行,子视图 - 用于单独的行。

// This view is the main view, 
struct ToppingCategoryView: View {

@Binding var menuItem: MenuItem
// Pretend this is the MenuItem passed:
// MenuItem(...toppings: ToppingList(name: "Cheeses", list: [Topping(name: "Mozza", price: 3.00, amount: 0), Topping(name: "Parmesan", price: 3.00, amount: 0)]))

var body: some View {
    VStack {
        Form {
            ForEach($menuItem.toppings) { $menu in
                Section (menu.name){
                    ExtraToppingsView(toppingsList: $menu.list)
                }
            }
        }
    }
}

下面的视图是步进器和@Binding 变量所在的位置。我想增加浇头的量。这样做会驳回观点,但仍会增加变量。如果我再次加载视图,它会正确显示。不确定为什么该观点被驳回。没有我可以重现或找到的错误消息或警告。

struct ExtraToppingsView: View {

@Binding var toppingsList: [Topping]

var body: some View {
    VStack {
        ForEach($toppingsList) { $topping in
            Stepper {
                Text("\(topping.amount)")
            } onIncrement: {
                topping.amount += 1
                if topping.amount >= 4 { topping.amount = 3 }
            } onDecrement: {
                topping.amount -= 1
                if topping.amount <= -1 { topping.amount = 0 }
            }
        }
    }
}

}

我弄明白问题出在哪里了,似乎是某种错误或其他我不知道的问题。

它与使用嵌套导航链接有关。

要解决此问题,我只需将 .isDetailLink(False) 添加到项目中的每个 NavigationLink。这解决了问题。