Я пытаюсь определить, возвращает ли SwiftUI ForEach
какой-либо контент:
struct FullListView: View {
@EnvironmentObject private var runningData: RunningData
@ObservedObject private var Categories = CategoriesStruct()
private var showNoContentMessage = true
var body: some View {
NavigationView {
VStack {
Form {
Section {
Toggle(isOn: self.$runningData.showSavedOnly){
Text ("Show Saved Only")
}
FilterOptionsView(Categories: Categories)
}
Section {
ForEach (ConditionsList) { ConditionInfo in
if (!self.runningData.showSavedOnly || ConditionInfo.isSaved) && (self.Categories.dict[ConditionInfo.category]! || self.Categories.allCategoriesFalse) {
showNoContentMessage = false
ListElementView(ConditionInfo: ConditionInfo, isItSaved: ConditionInfo.isSaved)
}
}
if self.showNoContentMessage {
Text("No matching conditions")
}
}
}
.navigationBarTitle(Text("Conditions"))
}
}
}
}
Внутри раздела ForEach
оператор if проверяет, отображать ли ListElementView
для указанного параметра. c ConditionInfo
структура информации от ConditionsList
. Я пытаюсь заставить программу отображать Text(“No matching conditions”)
, если не отображается ListElementView
просмотров. Я пытался сделать это, указав для переменной showNoContentMessage
значение по умолчанию true
, но изменить его на false
, если оператор if (!self.runngingData...
когда-либо вернет true. Однако всякий раз, когда я пытаюсь добавить self.showNoContentMessage = false
или showNoContentMessage = false
в вышеупомянутом операторе if, я получаю ошибку: The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
. Как мне отредактировать эту переменную в операторе if, или есть намного лучший способ увидеть, отображались ли какие-либо ListElementView
представления. Я пытался использовать функции, передавая переменную showNoContentMessage
в ListElementView
и редактируя ее там, и используя .onAppear()
, и все они либо не работали, либо выдавали мне разные сообщения об ошибках.