Я бы порекомендовал PromiseKit , чтобы дать вам больше контроля над обработкой асинхронного кода. Используя PromiseKit
, вы сможете получить доступ к объекту так же, как вы пытались выше.
Если вы не хотите добавлять зависимость, вы можете использовать completion handler
, как показано ниже, чтобы получить объект после завершения запроса.
func execute<T: Mappable>(request: HttpRequest, responseType: T.Type, completion: @escaping ((T?) -> Void)) {
Alamofire.SessionManager.default.request(request.stringURL, method: request.method, parameters: request.parameter.toJSON(), encoding: request.encoding, headers: request.headers)
.validate()
.response(completionHandler: { response in
let mappedObject: T? = self.singleResult(dataResult: response.data, resultType: T.self)
completion(mappedObject)
})
}
Затем вы можете вызвать метод, как показано ниже,
let service = YourService()
service.execute(request: fetchUser, responseType: User.self) { user in
guard let user = user else { return }
print(user.name)
}