FMPWrapper - фреймворк, написанный на Swift на основе HHFW. В этом блоке уже более объектно-ориентированный подход. Тем не менее при работе с ним необходимо иметь ввиду, что в основе лежит синглтон из HHFW. FMPWrapper не обязателен к использованию, так как является обёрткой для HHFW, однако он упрощает работу с кодом за счёт своей архитектуры. Для подключения фреймворка обратитесь к разделу «Подключение фреймворка FMPWrapper».
FMPWrapper содержит:
Основным рабочим элементом является объект класса FMP, который является фабрикой для инициализации строителей для всех используемых классов:
// Инициализация фабрики
let fmp: FMP = FMP.Builder().build()
// Инициализация строителя для объекта, описывающего локальную БД
let databaseBuilder: FMPDatabase.Builder = fmp.database
// Построение и инициализация объекта, описывающего локальную БД
let database: FMPDatabase = databaseBuilder
.path(databasePath)
.build()
// Вызов метода объекта
database.open()
Также во фреймворке FMPWrapper реализовано глобальное шифрование. Суть этого функционала в том, что при инициализации экземпляра класса FMP указывается ключ шифрования, который будет в дальнейшем использоваться для шифрования баз данных и файлов. Если шифрование не используется, то метод encryptionKey(_:) вызывать не обязательно.
// Инициализация фабрики
let fmp: FMP = FMP.Builder()
.encryptionKey(key)
.build()
В описании примеров для классов используется переменная fmp, которая инициализируется следующим образом:
let fmp: FMP = FMP.Builder().build()
Методы FMPWrapper возвращают данные в обработанном виде (объекты).
В случае запросов на сервер по окончанию вызывается замыкание типа FMPRequestResponseHandler (или иной в зависимости от метода). В этом замыкании аргументом является кортеж, в котором первыми двумя параметрами являются статус запроса Bool и опциональная ошибка FMPError?. Третьим параметром замыкания является результат запроса. Он может быть как словарем с данными NSDictionary, так и объектом или массивом объектов (это зависит от метода).
let file: FMPFile = fmp.file.build()
// typealias FMPRequestResponse = (success: Bool, error: FMPError?, result: NSDictionary?)
// typealias FMPRequestResponseHandler = (_ response: FMPRequestResponse) -> Void
file.download { (response) in
if response.success {
// Hurray!
} else {
print(response.error?.description)
}
}
// typealias FMPFileMetaHandler = (_ success: Bool, _ error: FMPError?, _ meta: FMPFile.Meta?) -> Void
file.loadMeta { (success, error, result) in
if success {
print(meta?.size)
}
}
См. также: