首页 > 解决方案 > SwiftUI 中有没有办法根据具有值的可选绑定返回不同的视图?

问题描述

我试图在我的视图模型上获取一些数据后显示一个视图(其中数据可以是可选的,因为视图模型只在请求时获取它)。

为什么以下不可能/我应该怎么做?

@Binding var someViewModel: SomeViewModel?

var body: some View {
    if let viewModel = self.someViewModel {
        return filledView(with: viewModel)
    }
    return emptyView()
}

此处不起作用的部分是if letSwift UI 视图构建器中的一个。

一种解决方案是使用一个单独的 Bool 来在加载数据时触发,或者甚至使用一个枚举来识别数据何时存在和何时不存在,但是视图代码充满了可选的值检查,这并不理想。

例如,我想避免做类似的事情:

Image(systemName: someViewModel?.icon.symbol() ?? "plus_sign")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 60, height: 60)
                    .foregroundColor(Color.red)
                    .padding()

任何帮助将不胜感激。

标签: swiftswiftuicombine

解决方案


你可以使用地图。如果它有一些值或完全忽略它,它将解开可选:

var body: some View {
    Group {
        someViewModel.map { FilledView(with: $0) }
    }
}

推荐阅读