FMPQuery

Описание

Класс 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)

Параметры:

  • completion. Замыкающее выражение, содержащее результат выполнения метода.

get() Выполнение SQL-запроса в базу данных.
func get() throws -> QueryResult?

Псевдонимы типов

Псевдоним типа Описание
DownloadResult Результат запроса загрузки ресурса с сервера на устройство. Используется методом download(completion:).
typealias DownloadResult = Result<Bool, Error>
QueryResult Результат выполнения SQL-запроса, отправленный в базу данных. Используется методом get().
typealias QueryResult = [[String : Any?]]

Примеры

Загрузка табличных данных в базу данных:

// Построим экземпляр класса 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
    // Обработаем результат после полной загрузки. К этому моменту метод делегата может быть вызван несколько раз.
}

См. также:

Фреймворк FMPKit | Классы