swiftui - 在 SwiftUI 中返回泛型 View 类型的方法
问题描述
进入 SwiftUI 并遇到了障碍。对于我的应用程序主屏幕,我想要一个结构来筛选各种状态并根据条件返回适当的视图。
在 Swift 中,我通常会应用某种“管理器”对象来查看数据状态并返回一个继承自 UIView 的类——但尝试在 SwiftUI 中做同样的事情会给我带来一些问题——这里的示例:
struct HomeScreenViewDirector {
func fetchView() -> View {
if someDataState {
return PopulatedHomeScreen()
} else {
return EmptyView()
}
}
}
struct EmptyHomeScreen: View {
var body: some View {
HStack {
navigationBarTitle("Empty State")
}
}
}
struct PopulatedHomeScreen: View {
var body: some View {
navigationBarTitle("Populated State")
}
}
尝试这样做会产生错误
Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements
在-> View
返回类型上。从一些研究来看,我似乎可以将其更改为some View
然后将我的所有回报包装为AnyView
但感觉这是错误的方法。
关于如何以及为什么处理这个问题的任何提示
干杯!
解决方案
试试这个
struct HomeScreenViewDirector {
let someDataState: Bool // << seems should be this as well?
@ViewBuilder
func fetchView() -> some View {
if someDataState {
PopulatedHomeScreen()
} else {
EmptyView()
}
}
}
推荐阅读
- javascript - WaveSurfer JS 无法在 Firefox 中为特定的 mp3 音频文件生成图形
- reactjs - 无法在 iphone 上加载图像,因为 android 设备代码正常工作
- javascript - 导入带有分号和空格的 JavaScript 文件
- c# - 为什么忽略默认约定不适用于 mongodb c# 中的嵌套子属性?
- excel - 从相乘值中识别最小值
- angular - 角度 6,带有 http Post 服务的嵌套参数
- spring - Thymeleaf 异常,试图将 .png 解析为模板
- linux - getuid/geteuid 奇怪的行为
- mysql - MySQL 假设部分 `pwrite()` 意味着磁盘已满
- javascript - 处理没有php的php数组