в надежде, что кто-нибудь может мне помочь. Попытка выяснить, что здесь происходит без удачи. Приложение, которое я создаю, содержит представленный ниже SwiftUI View.
Этот вид встроен в другой вид, который содержит другие списки, VStack и т. Д. Он вызывается, когда элемент выбран для отображения другого списка данных на основе выбора пользователя.
Все это выглядит, действует и работает как задумано (без фильтрации данных).
На данный момент я использую образец набора данных, созданный с использованием простого словаря данных. Когда я пытаюсь применить фильтр к этим данным путем сравнения строк, это приводит к ошибке компиляции со следующими сообщениями:
Из Xcode:
Компилятор не может проверить типэто выражение в разумные сроки;попробуйте разбить выражение на отдельные подвыражения
Из Canvas:
timedOutSpecific (30.0, операция: «сборщик»)
В дополнение к этим ошибкам, энергопотребление Xcode резко возрастает до отказа.
Код, указанный ниже, будет работать, если я уберу код self.dataSet == aRecord.module
в операторе if и заменим его на true
. Каждый раз, когда я пытаюсь отфильтровать свой набор данных, это приводит к этим ошибкам.
import SwiftUI
struct DataListView: View {
@State var titleBar = ""
@State private var showFavorites = false
@State private var showPriority = false
@State var dataSet = ""
var body: some View {
List{
ForEach (sampleData) { aRecord in
if (((aRecord.isFavorite && self.showFavorites) ||
(aRecord.isPriority && self.showPriority) ||
(!self.showPriority)) && self.dataSet == aRecord.module ){
VStack {
NavigationLink(destination: DetailView(titleBar: aRecord.title, statuteData: aRecord.statuteData, isFavorite: aRecord.isFavorite)) {
HStack {
Text(aRecord.module)
.font(.subheadline)
VStack(alignment: .leading) {
Text(aRecord.title)
}
.scaledToFit()
Spacer()
if aRecord.isFavorite {
Image(systemName: "star.fill")
.imageScale(.small)
.foregroundColor(.yellow)
}
}
}
}
.navigationBarTitle(self.titleBar)
.navigationBarItems(trailing:
HStack{
Button(action: {
self.showFavorites.toggle()
}) {
if self.showFavorites {
Image(systemName: "star.fill")
.imageScale(.large)
.foregroundColor(.yellow).padding()
} else {
Image(systemName: "star")
.imageScale(.large).padding()
}
}
Button(action: {
self.showPriority.toggle()
}) {
if self.showPriority {
Text("Priority")
} else {
Text("Standard")
}
}
})
}//endif
}
}//end foreach
}
}
struct TempCode_Previews: PreviewProvider {
static var previews: some View {
DataListView(dataSet: "myDataSetID")
}
}
Причина, по которой я считаю, что сравнение строк является виновником, к примеру, приводит к сбою, как описано выше. Я также попытался поместить условное в другие места по всему коду с теми же результатами. Каждый раз, когда я применяю этот тип фильтра, это вызывает сбой.
Любой совет приветствуется.
Спасибо.