Класс FMPResource предназначен для описания ресурса.
class FMPResource
Свойство | Описание |
downloadDelegate |
Делегат, обрабатывающий события, специфичные для задач загрузки
табличных данных.
var downloadDelegate: FMPResourceDownloadDelegate? |
isDelta | Использование метода deltaStream
при запросе к серверу.
var isDelta: Bool { get } |
isFiltered |
Использование фильтрации по столбцам при запросе к серверу.
var isFiltered: Bool { get } |
isLocalCached |
Использование кэширования таблиц в локальной базе данных.
var isLocalCached: Bool { get } |
name |
Название ресурса.
var name: String { get } |
params | Входные параметры для запроса ресурса.
var params: RequestParameters? { get } |
scheme |
Информация о ресурсе, содержащемся в схеме ресурсов. При инициализации
через FMPResource.Builder
свойство будет принимать значение nil по умолчанию. После вызова
метода updateScheme() или при получении объекта через метод getResources()
класса FMPScheme свойство принимает
значение, отличное от nil.
var scheme: Scheme? { get } |
Метод | Описание |
copy() | Получение экземпляра класса-строителя для копирования FMPResource.
Возвращает экземпляр класса-строителя FMPResource.Builder.
func copy() -> FMPResource.Builder |
download(transaction:filters:completion:) |
Загрузка табличных данных ресурса в базу данных.
func download(transaction: FMPTransaction? = nil, filters: [FMPResource.Filter] = [], completion: @escaping (DownloadResult) -> Void) Параметры:
|
getTransactions(completion:) |
Получение списка транзакций, связанных с ресурсом.
func getTransactions(completion: @escaping (TransactionsResult) -> Void) Параметры:
|
updateSheme() |
Обновление текущей схемы ресурса из локальной базы данных в
свойстве scheme.
func updateScheme() throws |
Псевдоним типа | Описание |
Результат запроса загрузки ресурса с сервера на устройство.
Используется методом download(transaction:filters:completion:).
typealias DownloadResult = Result<Bool, Error> |
|
Тип входных параметров для запроса ресурса. Используется свойством
params.
typealias RequestParameters = Data |
|
Результат запроса на получение списка транзакций, связанных
с ресурсом. Используется методом getTransactions(completion:).
typealias TransactionsResult = Result<[FMPTransaction], Error> |
Обновление информации о ресурсе, содержащемся в схеме ресурсов:
// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
// Обновим свойство scheme
do {
try resource.updateScheme()
} catch let error {
// Выведем код и описание ошибки
print((error as? FMPError)?.code, (error as? FMPError)?.description)
}
Получение списка транзакций:
// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
// Получим список связанных с ресурсом транзакций
resource.getTransactions { (result) in
switch result {
case .success(let transactions):
// Выведем список идентификаторов транзакций
print(transactions.map { $0.id })
case .failure(let error):
// Выведем код и описание ошибки
print((error as? FMPError)?.code, (error as? FMPError)?.description)
}
}
Копирование экземпляра класса FMPResource:
// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
// Скопируем экземпляр класса FMPResource
let resourceCopy: FMPResource = resource.copy().build()
Загрузка табличных данных конкретного ресурса:
// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
// Загрузим табличные данные
resource.download { (result) in
switch result {
case .success(_):
// Успешная загрузка данных
case .failure(let error):
// Выведем код и описание ошибки
print((error as? FMPError)?.code, (error as? FMPError)?.description)
}
}
Загрузка табличных данных конкретного ресурса с использованием транзакций и фильтрации:
// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource
.isFiltered() // Для фильтрования данных при запросе данных с сервера
.build()
// Построим экземпляр транзакции
let transaction = fmp.transaction
.id(UUID().uuidString)
.resource(resource)
.build()
// Загрузим табличные данные с использованием транзакции и фильтра строк по значению value в столбце name
resource.download(transaction: transaction, filters: [.column("name", value: "value")]) { (result) in
switch result {
case .success(_):
// Успешная загрузка данных
case .failure(let error):
// Выведем код и описание ошибки
print((error as? FMPError)?.code, (error as? FMPError)?.description)
}
}
Отслеживание прогресса загрузки табличных данных в базу данных:
// Обозначим класс, реализующий метод делегата FMPResourceDownloadDelegate
class ResourceDelegate: FMPResourceDownloadDelegate {
func resource(_ resource: FMPResource, downloadProgress: Double) {
// Выведем название ресурса и прогресс его загрузки в процентах
print("Прогресс загрузки ресурса \(resource.name): \(downloadProgress * 100)%")
}
}
// Построим класс ResourceDelegate
let resourceDelegate = ResourceDelegate()
// Построим экземпляр класса FMPResource
let resource: FMPQuery = fmp.resource.build()
// Обозначим делегат
resource.downloadDelegate = resourceDelegate
// Загрузим данные указанных в запросе ресурсов
resource.download() { result in
// Обработаем результат после полной загрузки. К этому моменту метод делегата может быть вызван несколько раз.
}
См. также: