我有一个菜单列表
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”一起使用
答案 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)")
}
}
}