Фреймворк FMPWrapper

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)
    }
}

См. также:

Фреймворк iOS | Классы | Перечисления | Псевдонимы типов