Класс FMPQuery предназначен для описания запроса данных.
class FMPQuery
Свойство | Описание |
downloadDelegate | Делегат, обрабатывающий события, специфичные для задач загрузки
табличных данных.
var downloadDelegate: FMPQueryDownloadDelegate? |
query | SQL-запрос в базу данных.
var query: String { get } |
transactions | Список транзакций для выполнения метода download(completion:).
var transactions: [FMPTransaction] { get } |
Метод | Описание |
copy() | Получение экземпляра класса-строителя для копирования FMPQuery.
Возвращает экземпляр класса-строителя FMPQuery.Builder.
func copy() -> FMPQuery.Builder |
download(completion:) |
Загрузка табличных данных в базу данных.
func download(completion: @escaping ([DownloadResult]) -> Void) Параметры:
|
get() | Выполнение SQL-запроса в базу данных.
func get() throws -> QueryResult? |
Загрузка табличных данных в базу данных:
// Построим экземпляр класса FMPQuery
let query: FMPQuery = fmp.query.build()
// Загрузим данные с сервера
query.download {results in
let errorResults = results.filter {
switch $0 {
case .success(_): return false
case .failure(_): return true
}
}
if errorResults.isEmpty {
// Данные успешно загружены в базу данных
} else {
// Выведем все ошибки
let errorDescriptions = errorResults.compactMap {
switch $0 {
case .failure(let error): return error.localizedDescription
default: return nil
}
}
print(errorDescriptions)
}
}
Выполнение SQL-запроса:
// Построим экземпляр класса FMPQuery
let query: FMPQuery = fmp.query.build()
// Получим результат SQL-запроса в базу данных
do {
let sqlResult = try query.get()
} catch let error {
// Выведем код и описание ошибки
print((error as? FMPError)?.code, (error as? FMPError)?.description)
}
Копирование экземпляра класса FMPQuery:
// Построим экземпляр класса FMPQuery
let query: FMPQuery = fmp.query.build()
// Скопируем экземпляр класса FMPQuery
let queryCopy: FMPQuery = query.copy().build()
Отслеживание прогресса загрузки табличных данных в базу данных:
// Обозначим класс, реализующий метод делегата FMPQueryDownloadDelegate
class QueryDelegate: FMPQueryDownloadDelegate {
func query(_: FMPQuery, resource: FMPResource, downloadProgress: Double) {
// Выведем название ресурса и прогресс его загрузки в процентах
print("Прогресс загрузки ресурса \(resource.name): \(downloadProgress * 100)%")
}
}
// Построим класс DownloadDelegate
let queryDelegate = QueryDelegate()
// Построим экземпляр класса FMPQuery
let query: FMPQuery = fmp.query.build()
// Обозначим делегат
query.downloadDelegate = queryDelegate
// Загрузим данные ресурсов, указанных в запросе
query.download() { (responses) in
// Обработаем результат после полной загрузки. К этому моменту метод делегата может быть вызван несколько раз.
}
См. также: