SwiftUI ForEach не компилируется, если блок внутри - ошибка или я что-то не так делаю? - PullRequest
1 голос
/ 08 января 2020

Я получаю ошибку, которую не понимаю. Я не уверен, что это ошибка компилятора или я что-то не так делаю?

В представлении swiftUI у меня есть список элементов из основных данных (рисунок 1). В приведенном ниже примере я заменил t.name на «yo» по какой-то неопределенной причине ?.

В любом случае, задачи - это запрос на выборку из Core Data:

@FetchRequest(entity: Task.entity(), sortDescriptors: []) var tasks: FetchedResults<Task>

РИСУНОК 1: Хорошо работает, чтобы собрать и запустить приложение. enter image description here

РИСУНОК 2: Не работает для сборки и запуска приложения. enter image description here

Пожалуйста, , помогите мне понять, что я делаю неправильно, или это ошибка компилятора? Почему я не могу добавить блок if внутри ForEach? Я могу предоставить больше информации, если это необходимо. Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете использовать if внутри ForEach, но вы должны помнить, что ForEach это не оператор языка foreach, а тип структуры с ViewBuilder в конструкторе с обобщениями в объявлении, поэтому необходимо определить тип, который в вашем случае он не может определить.

Возможное решение состоит в том, чтобы явно указать, какой тип вы возвращаете, как показано ниже (протестировано с Xcode 11.2 / iOS 13.2)

ForEach(tasks, id: \.id) { name -> Text in
    if (true) {
        return Text("name")
    }
}
1 голос
/ 12 марта 2020

Вы должны вернуть ноль в случае ложного условия. Поэтому вам нужно объявить параметр как Необязательный и вернуть nil в случае ложного условия (XCode - 11.3.1).

ForEach(tasks, id: \.id) { t -> Text? in
    return condition ? Text("text") : nil
  }
}
...