SwiftUI中的ForEach问题

时间:2019-06-09 15:52:05

标签: 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 '(_) -> _'

对可能是什么问题有任何想法吗?

2 个答案:

答案 0 :(得分:4)

好的,我很快想出了答案。根据Apple的文档,数组元素必须为Identifiable,因此可以正常工作……

var body: some View {
    List {
        ForEach(requests.identified(by: \.self)) { request in
            RequestRow(request: request)
        }
    }
}

我确定我不会是遇到此问题的最后一个人,所以我将其留在此处以供将来参考。

答案 1 :(得分:0)

我遇到了同样的问题,但是在我的情况下,Component是一个协议,因此它不能符合可识别的

VStack {

       ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
            UIFactory(component: value)
       }
}

但是,如果我尝试这种方法,它会很好

VStack {

       ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
            Text(value.uuid)
       }
}