SwiftUI的外观差异

时间:2019-12-23 07:59:36

标签: xcode swiftui swiftui-navigationlink

我有一个菜单列表

let muscleEtfs = Menu(name:"MuscleETFs",  image:"image", destination: .muscleETFs)

let menus: [Menu] = [home, marketTrend, indexes, sectors, stockAnalysis, backtest, screener, myPortfolio, watchList, muscleStocks, muscleEtfs]

我的目标是有条件地在SwiftUI中更改NavigationLink的目的地。任何人都可以向我解释为什么开关盒不起作用,但如果起作用了。

let muscleEtfs = Menu(name:"MuscleETFs",  image:"image", destination: .muscleETFs)

    var body: some View {
        let menus: [Menu] = [home, marketTrend, indexes, sectors, stockAnalysis, backtest, screener, myPortfolio, watchList, muscleStocks, muscleEtfs]

        return List {
            ForEach(menus) { menu in

                // This does not work
                switch menu.destination {
                case .news:
                    NavigationLink(
                            destination: HomeNewsView(menu: menu)
                    )
                    {
                        Text("\(menu.name)")
                    }
                default:
                    NavigationLink(
                            destination: HomeNewsView(menu: menu)
                    )
                    {
                        Text("\(menu.name)")
                    }

                }

                // This does
                if menu.destination == .news   {
                    NavigationLink(
                            destination: HomeNewsView(menu: menu)
                    )
                    {
                        Text("\(menu.name)")
                    }
                }
            }
        }

使用开关条件会在Xcode上引发编译错误

包含封闭流的控制流语句不能与函数构建器“ ViewBuilder”一起使用

1 个答案:

答案 0 :(得分:0)

这有效,请记住返回类型AnyView或View将不起作用。

func destinationView(菜单:菜单)->一些视图{

        switch menu.destination {
        case .news:
            return NavigationLink(
                    destination: HomeNewsView(menu: menu)
            )
            {
                Text("\(menu.name)")
            }
        default:
            return NavigationLink(
                    destination: HomeNewsView(menu: menu)
            )
            {
                Text("\(menu.name)")
            }
        }

    }