swift - SwiftUI 中有没有办法根据具有值的可选绑定返回不同的视图?
问题描述
我试图在我的视图模型上获取一些数据后显示一个视图(其中数据可以是可选的,因为视图模型只在请求时获取它)。
为什么以下不可能/我应该怎么做?
@Binding var someViewModel: SomeViewModel?
var body: some View {
if let viewModel = self.someViewModel {
return filledView(with: viewModel)
}
return emptyView()
}
此处不起作用的部分是if let
Swift UI 视图构建器中的一个。
一种解决方案是使用一个单独的 Bool 来在加载数据时触发,或者甚至使用一个枚举来识别数据何时存在和何时不存在,但是视图代码充满了可选的值检查,这并不理想。
例如,我想避免做类似的事情:
Image(systemName: someViewModel?.icon.symbol() ?? "plus_sign")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 60, height: 60)
.foregroundColor(Color.red)
.padding()
任何帮助将不胜感激。
解决方案
你可以使用地图。如果它有一些值或完全忽略它,它将解开可选:
var body: some View {
Group {
someViewModel.map { FilledView(with: $0) }
}
}
推荐阅读
- java - 无法使用 igniterealtime/REST-API-Client 在 openfire 创建用户
- android - 安卓计费库V3.0.0 不工作
- java - 使用 Firebase 计算用户之间的位置
- python - BERT 服务器未启动
- java - JAVA-SPRING - 错误 java.lang.ClassNotFoundException: "com.mysql.jdbc.Driver" 将我的连接连接到其他类但在 Main 上工作
- macos - 有没有办法使用“/sys-like”文件夹更改 macOS 上的屏幕亮度?
- php - 根据可能性显示文本
- ios - 是否可以更改单个 UITableViewCell 的属性?
- javascript - 如何用 Javascript 控制 Django?
- puppeteer - 如何等待加载页面上的 Javascript 执行