#ios #swift #swiftui
#iOS #swift #swiftui
Вопрос:
В данный момент я изучаю SwiftUI. Я играл с загрузкой списка из CoreData и внесением изменений в / фильтрацию и т.д. Я столкнулся с проблемами, приведенными ниже. По сути, как только я пытаюсь применить какие-либо условия в ForEach I, я получаю сообщение об этой ошибке.
Это работает, если я выполняю итерацию по организациям в самом списке, а не по каждому. Это не идеальное решение, поскольку я теряю встроенную функцию удаления.
Я что-то глупое упускаю?
let defaults = UserDefaults.standard
@EnvironmentObject var userData: UserData
@Environment(.managedObjectContext) var managedObjectContext
@FetchRequest(entity: Organisation.entity(), sortDescriptors: [NSSortDescriptor(keyPath: Organisation.name, ascending: true)])
var orgs: FetchedResults<Organisation>
var body: some View
{
NavigationView {
List {
ForEach(orgs, id: .self) {org in
if !self.userData.showFavsOnly || org.isFavorite {
NavigationLink(destination: OrganisationView(org: org, moc: self.managedObjectContext)) {
OrganisationRow(org: org)
}
}
}
}
}
}
Там код ошибки, который я получаю, я получаю для каждой строки и является
Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
Спасибо за вашу помощь
Ответ №1:
Тип ‘()’ не может соответствовать ‘View’; только типы struct / enum / class могут соответствовать протоколам
Эта ошибка означает, что ваш ForEach
цикл ожидает некоторого представления. Но вместо этого вы даете ему if-statement
. Что, если условие возвращает false?
Решение может заключаться в том, чтобы обернуть if-statement
в какой-либо вид — это может быть Group
, VStack
ZStack
…
ForEach(orgs, id: .self) { org in
Group {
if !self.userData.showFavsOnly || org.isFavorite {
NavigationLink(destination: OrganisationView(org: org, moc: self.managedObjectContext)) {
OrganisationRow(org: org)
}
}
}
}