NavigationLink с условным выражением в списке

Я хочу показать категории и подкатегории некоторых данных. У меня есть данные, полученные из json, когда в категории нет подкатегорий, у них есть parent = 0, и если он отличается от нуля, подразумевается, что в указанной категории есть подкатегории.

Затем из списка лиц, осуществляющих уход, я хочу получить NavigationLink в соответствии со значениемparent.

Как можно использовать NavigationLink с условием?

Если в категории нет подкатегорий, вы должны перейти к просмотру Product (), в противном случае вы должны перейти к просмотру Scategory

Что-то в этом роде, чтобы добавить в Navigation Link

if parent == 0 {
Product()
} else {
Scategory()
}

Базовый пример кода

struct ContentView: View {
    private let cats = [
        "Category 1", "Category 2"
    ]

    //Here I am assuming this value, when changing to zero you must change the destination of `navigationLInk`
    var parent = 20

    var body: some View {
        NavigationView {
            List(cats, id: \.self) { item in
                //Here, how can I add a conditional to the `NavigationLink` using the value of` parent`
                NavigationLink(destination: Scategory(item: item)) {
                    Text(item)
                }
            }.navigationBarTitle("Category")
        }
    }
}

struct Scategory: View {
    let item: String

    var body: some View {
        VStack {
            Text("Subcategory View \(item)")
                .font(.largeTitle)
        }
    }
}


struct Product: View {
    let item: String

    var body: some View {
        VStack {
            Text("Produc View \(item)")
                .font(.largeTitle)
        }
    }
}

Просмотры


person Mario Burga    schedule 26.11.2019    source источник


Ответы (3)


Используйте третичный оператор внутри объявления NavigationLink:

NavigationLink(destination: self.parent == 0 ?  Product() : Scategory())) {
                Text(String(item))
}
person LuLuGaGa    schedule 26.11.2019
comment
Я получаю следующую ошибку: Result values in '? :' expression have mismatching types 'Product' and 'Scategory' - person Mario Burga; 27.11.2019
comment
Оберните их в AnyView - person LuLuGaGa; 27.11.2019

Я должен работать с этим:

            if self.parent == 0 {

            NavigationLink(destination: Product(item: item)) {
                Text(item)
            }
            } else {

                NavigationLink(destination: Scategory(item: item)) {
                    Text(item)
            }
person AlbertB    schedule 26.11.2019

Попробуйте преобразовать свои пользовательские представления в AnyView следующим образом:

if parent == 0 {
    AnyView(Product())
} else {
    AnyView(Scategory())
}
person Tulleb    schedule 16.02.2020