【发布时间】:2020-04-14 12:54:59
【问题描述】:
我有一个菜单列表
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)")
}
}
}
}
使用 switch 条件会在 Xcode 上引发编译错误
包含控制流语句的闭包不能与函数生成器“ViewBuilder”一起使用
【问题讨论】:
-
返回视图的开关没有按照你想要的方式实现。您可以使用方法内部的逻辑或仅使用 if/else。
-
谢谢。只有这样才能工作,而不是 View 或 AnyView 只有一些视图作为返回类型。
标签: xcode swiftui swiftui-navigationlink