Проблема с ForEach в SwiftUI - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь создать список из массива 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 ]

4 голосов
/ 09 июня 2019

ОК, я скоро разобрался с ответом.Согласно документации Apple, элементы массива должны быть Identifiable, так что это работает…

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

Я уверен, что я не буду последним человеком, у которого возникнет эта проблема, поэтому я оставлю этоздесь для дальнейшего использования.

0 голосов
/ 18 июня 2019

У меня та же проблема, но в моем случае Component - это протокол, поэтому он не может быть идентифицирован как * Identify

VStack {

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

Тем не менее, если я попробую что-то подобное, это будет нормально работать

VStack {

       ForEach(components.identified(by: \.uuid)) { value -> UIFactory in
            Text(value.uuid)
       }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...