У меня есть список с отображением результата динамического c FetchRequest.
Код работает нормально, но с большим набором результатов (например, 3000), список строится довольно медленно, когда динамический c предикат изменен.
struct ItemList: View {
@State var startsWith: String = "A"
var body: some View {
NavigationView {
VStack {
TextField("Startswith", text:$startsWith)
FilterRequestList(filter: startsWith)
}
.navigationBarTitle("Tasks CD")
}
}
}
struct FilterRequestList: View {
var fetchRequest: FetchRequest<Item>
init(filter: String) {
if filter == "" {
fetchRequest = FetchRequest<Item>(entity: Item.entity(),
sortDescriptors: [],
predicate: nil)
} else {
fetchRequest = FetchRequest<Item>(entity: Item.entity(),
sortDescriptors: [],
predicate: NSPredicate(format: "title BEGINSWITH %@", filter))
}
}
var body: some View {
VStack {
Text("Count: \(fetchRequest.wrappedValue.count)")
List(fetchRequest.wrappedValue, id: \.self) { item in
Text("\(item.title) ")
}
}
}
}
Есть идеи, как это улучшить?
Обновление: Что я обнаружил: Первый Список довольно быстрый, но если Запускается с изменением состояния, перезагрузка происходит очень медленно. Я добавил
FilterRequestList(filter: startsWith)
.onAppear(perform: { print("appear F") })
.onDisappear(perform: { print("disappear F") })
и обнаружил, что FilterRequestList
не исчезает и не появляется снова при смене фильтра.
Может ли это быть проблемой? Как можно навязать отдых?