SwiftUI 中的 ForEach 问题
Issue with ForEach in SwiftUI
我正在尝试从 Request
对象数组创建一个列表。
我定义了一个自定义视图 RequestRow
来显示 Request
。
以下作品用于显示请求列表…
struct RequestsView : View {
let requests: [Request]
var body: some View {
List {
ForEach(0..<requests.count) { i in
RequestRow(request: self.requests[i])
}
}
}
}
但以下不会编译...
struct RequestsView : View {
let requests: [Request]
var body: some View {
List {
ForEach(requests) { request in
RequestRow(request: request)
}
}
}
}
Cannot convert value of type '(Request) -> RequestRow' to expected argument type '(_) -> _'
关于问题可能是什么有什么想法吗?
好的,我很快就找到了答案。根据 Apple 的文档,数组元素必须是 Identifiable
,所以这有效……
var body: some View {
List {
ForEach(requests.identified(by: \.self)) { request in
RequestRow(request: request)
}
}
}
我相信我不会是最后一个遇到这个问题的人,所以我会把它留在这里以供将来参考。
我有同样的问题,但在我的例子中 Component
是一个协议,所以它不能符合 Identifiable
VStack {
ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
UIFactory(component: value)
}
}
但是,如果我尝试这样的操作,它会正常工作
VStack {
ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
Text(value.uuid)
}
}
我正在尝试从 Request
对象数组创建一个列表。
我定义了一个自定义视图 RequestRow
来显示 Request
。
以下作品用于显示请求列表…
struct RequestsView : View {
let requests: [Request]
var body: some View {
List {
ForEach(0..<requests.count) { i in
RequestRow(request: self.requests[i])
}
}
}
}
但以下不会编译...
struct RequestsView : View {
let requests: [Request]
var body: some View {
List {
ForEach(requests) { request in
RequestRow(request: request)
}
}
}
}
Cannot convert value of type '(Request) -> RequestRow' to expected argument type '(_) -> _'
关于问题可能是什么有什么想法吗?
好的,我很快就找到了答案。根据 Apple 的文档,数组元素必须是 Identifiable
,所以这有效……
var body: some View {
List {
ForEach(requests.identified(by: \.self)) { request in
RequestRow(request: request)
}
}
}
我相信我不会是最后一个遇到这个问题的人,所以我会把它留在这里以供将来参考。
我有同样的问题,但在我的例子中 Component
是一个协议,所以它不能符合 Identifiable
VStack {
ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
UIFactory(component: value)
}
}
但是,如果我尝试这样的操作,它会正常工作
VStack {
ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
Text(value.uuid)
}
}