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)
       }
}