xcode - SwiftUI 中视图主体的差异
问题描述
我有一个菜单列表
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”一起使用
解决方案
这行得通,记住返回类型 AnyView 或 View 将不起作用。
func destinationView(menu: Menu) -> 一些视图 {
switch menu.destination {
case .news:
return NavigationLink(
destination: HomeNewsView(menu: menu)
)
{
Text("\(menu.name)")
}
default:
return NavigationLink(
destination: HomeNewsView(menu: menu)
)
{
Text("\(menu.name)")
}
}
}
推荐阅读
- javascript - 在javascript响应上使用时videojs播放按钮不起作用
- python - Python中的密码验证
- php - DELETE 在 Laravel 数据表中不起作用
- swift - 如何在 iOS 13 的搜索字段上方添加“关闭(下拉)指示器(线)”
- angular - 此构造函数与 Angular 依赖注入不兼容,因为它在参数列表索引 0 处的依赖无效
- python - 格式字符串的参数不足错误
- c# - C#圆角矩形角不一致
- vuejs2 - vue/cli 应用程序有维护模式吗?
- ruby-on-rails - 不允许的参数:address_fields
- javascript - 单击并移动项目 ReactJs