Замените CompletionHandler в запросе и получите настройки с обещаниями. Я изменил это до некоторой степени исходя из моего понимания.
Изменить
func request(url: String,
parameters: JSON? = nil,
requestMethod: HTTPMethod,
completion: @escaping completion)
до
func request(url: String,
parameters: JSON? = nil,
requestMethod: HTTPMethod) -> Promise<[Model.Settings.Datum]> {
return Promise { seal in
self.logger.log(category: .network, message: "Starting request", access: .public)
Alamofire.request(
url,
method: requestMethod,
parameters: parameters,
encoding: JSONEncoding.prettyPrinted
).responseData { response in
if let data = response.data {
self.logger.log(category: .network, message: "Response: \(data)", access: .private)
seal.fulfill(data)
} else {
self.logger.log(category: .network, message: SWError.dataError.localizedDescription, access: .public, type: .error)
seal.reject(.failure(SWError.dataError))
}
}
}
}
А также изменить
public func getSettings( completion: @escaping (Result<Model.Settings.Settings>) -> Void)
до
public func getSettings() -> Promise<[Model.Settings.Settings]> {
return Promise { seal in
RequestManager.shared.request(
url: Endpoint.Settings.slash.url(),
requestMethod: .get).then { data in
do {
let result = try JSONDecoder().decode(Model.Settings.Settings.self, from: data)
seal.fulfill(result)
} catch {
Request.Shared.handleCode(from: data).then { serverCode in
logger.log(category: .network, message: SWError.decodingError.localizedDescription, access: .public, type: .error)
seal.reject(.failure(serverCode))
}
}
}
}
После внесения изменений используйте эти методы в getAppSettings, чтобы случаи ошибок могли быть успешно обнаружены.
func getAppSettings() -> Promise<[Model.Settings.Datum]> {
return Promise { seal in
Request.Settings.getSettings.then { model in
if let data = model.data {
seal.fulfill(data)
} else {
seal.reject(SWError.create(with: "No app settings data"))
}
}
}
}