В SwiftUI вы можете использовать Core Data для получения данных с помощью запросов на выборку. Вот несколько методов, которые вы можете использовать:
- FetchRequest: SwiftUI предоставляет оболочку свойства под названием FetchRequest, которая позволяет вам создавать запрос на выборку непосредственно в представлении SwiftUI. Вы можете указать сущность, дескрипторы сортировки и предикаты для фильтрации результатов.
@FetchRequest(entity: YourEntity.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \YourEntity.propertyName, ascending: true)], predicate: NSPredicate(format: "yourPredicate")) var results: FetchedResults<YourEntity>
-
NSFetchedResultsController: Если вам нужен больший контроль над полученными результатами, вы можете использовать NSFetchedResultsController. Он предоставляет методы делегирования для отслеживания изменений в полученных результатах и соответствующего обновления представления SwiftUI.
-
Извлечение в ViewModel. Вы также можете выполнить запрос на выборку в отдельной ViewModel и наблюдать за результатами в представлении SwiftUI. Этот подход позволяет отделить логику получения данных от уровня представления.
class YourViewModel: ObservableObject {
@Published var results: [YourEntity] = []
private var cancellable: AnyCancellable?
init() {
fetchData()
}
func fetchData() {
let request: NSFetchRequest<YourEntity> = YourEntity.fetchRequest()
// Configure the fetch request as needed
// ...
cancellable = PersistenceController.shared.fetch(request)
.replaceError(with: [])
.receive(on: DispatchQueue.main)
.assign(to: &$results)
}
}
- Извлечение вручную. Наконец, вы можете вручную получить данные с помощью класса
NSManagedObjectContext. Вы можете создать экземплярNSFetchRequest, настроить его и выполнить запрос на выборку, используя контекст управляемого объекта.
let context = PersistenceController.shared.container.viewContext
let request: NSFetchRequest<YourEntity> = YourEntity.fetchRequest()
// Configure the fetch request as needed
// ...
do {
let results = try context.fetch(request)
// Process the fetched results
} catch {
// Handle the error
}