SwiftUI 中的 ForEach 问题
Posted
技术标签:
【中文标题】SwiftUI 中的 ForEach 问题【英文标题】:Issue with ForEach in SwiftUI 【发布时间】:2019-06-09 15:52:05 【问题描述】:我正在尝试从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 '(_) -> _'
关于问题可能是什么的任何想法?
【问题讨论】:
【参考方案1】:好的,我很快就找到了答案。根据 Apple 的文档,数组元素必须是 Identifiable
,所以这行得通……
var body: some View
List
ForEach(requests.identified(by: \.self)) request in
RequestRow(request: request)
我相信我不会是最后一个遇到这个问题的人,所以我将把它留在这里以供将来参考。
【讨论】:
赞成,但我已经通过这个链接完成了这个工作,这也可能对其他人有所帮助 - hackingwithswift.com/quick-start/swiftui/… 这是一个很好的资源,尽管 SwiftUI 是 Beta 1!希望这个索引可以帮助您解决其他问题 -hackingwithswift.com/quick-start/swiftui 最好在模型上使用协议 Identifiable。它会让你的代码更清晰 对于 XCode 11 Beta 5 及更高版本,请使用:ForEach(requests, id: \.self)【参考方案2】:我有同样的问题,但在我的情况下,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)
【讨论】:
以上是关于SwiftUI 中的 ForEach 问题的主要内容,如果未能解决你的问题,请参考以下文章