swift - type() 不能符合 View;只有结构/枚举/类类型可以符合协议
问题描述
我正在关注本教程https://www.youtube.com/watch?v=Xd0J18isFEQ用于我的应用程序,这是一个简单的应用程序,在主屏幕上显示值列表 + 然后每行都有一个详细视图
我已经实现了一个路由器来指定我的应用程序的路由,如下所示:
enum Router {
case detail(Result)
}
struct Navigator {
static func navigate<T: View>(_ route: Router, content: () -> T) -> AnyView {
switch route {
case .detail(let item):
return AnyView(NavigationLink(
destination: DetailView(story: item)) {
content()
})
}
}
}
我在我的主屏幕上使用它嵌入这样的:
struct Home: View {
@ObservedObject var newsfeed = Newsfeed()
@State var page: Int = 1
var body: some View {
List {
ForEach(newsfeed.data) { item in
Navigator.navigate(.detail(item)) {
HStack {
WebImage(url: URL(string: item.fields.thumbnail)!)
.resizable()
.scaledToFill()
.frame(width: 120, height: 120)
.cornerRadius(2)
}
VStack (alignment: .leading, spacing: 5) {
Text(item.fields.headline)
.font(.headline)
.fontWeight(.bold)
Text(item.fields.trailText)
.font(.caption)
}
.frame(maxHeight: 120)
}
.onAppear() {
if (newsfeed.data.last == item) {
newsfeed.loadData(pageParam: page + 1, search: nil, key: nil) { result, size in
if (result != nil) { newsfeed.data.append(contentsOf: result!) }
if (size != nil) { newsfeed.pageSize += size! }
}
self.page += 1
}
}
}
}
}
}
但是我在 Navigator.navigat 上遇到错误。类型“()”不能符合 View,只有 struct/enum/class 类型可以符合协议
解决方案
navigate
,如所写,想要接受一个论点,但您同时发送 anHStack
和 a VStack
。
@ViewBuilder
可以为你解决这个问题,它是一个注解(在 SwiftUI 中经常使用,尤其是在内置组件中),它让视图拥有/返回多个根级元素:
static func navigate<T: View>(_ route: Router, @ViewBuilder content: () -> T) -> AnyView {
推荐阅读
- docker - 如何在主机上以确切用户身份运行 docker 容器?
- python - 我们可以用 python 更改对话流实现设置吗?
- android - Jitpack 不构建项目
- asp.net - Footable 分页限制在某些情况下不起作用
- c++ - 在 Visual Studio 2017 中使用库设置 vc++ 项目的正确方法
- c++ - C++ - 为什么是 std::function
无效的? - python - Python - ConnectionRefusedError、urllib3.exceptions.NewConnectionError 和 Colorama
- python - dlib-build@0.1.1 安装失败
- c++ - string to double 或 float 截断小数点
- php - .htaccess 重写会留下损坏的图像