Как изменить переменную из представления SwiftUI? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь определить, возвращает ли 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(), и все они либо не работали, либо выдавали мне разные сообщения об ошибках.

1 Ответ

0 голосов
/ 03 апреля 2020

изменить

private var showNoContentMessage = true

на

@State private var showNoContentMessage = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...