import Foundation import Alamofire struct EmptyParams: Encodable {} struct HTTPBinResponse: Decodable { let code: Int let data: T let message: String } func makeAlamofireRequest(api: String, method: HTTPMethod = .get, param: Parame? = nil, completion: @escaping (Result, AFError>) -> Void) { var headers: HTTPHeaders = [ "Accept": "application/json", "Content-Type":"application/json" ] let loginStatus = checkLoginStatus() if loginStatus.login { headers.add(name: "Authorization", value: loginStatus.token) } AF.request(api, method: method, parameters: param, encoder: JSONParameterEncoder.default,headers: headers).validate().responseDecodable(of: HTTPBinResponse.self) { response in completion(response.result) } } func uploadFile(api: String,file: Data,progressHandler: @escaping (Double) -> Void,completion: @escaping (Result, AFError>) -> Void) { var headers: HTTPHeaders = [ "Accept": "application/json", "Content-Type":"application/octet-stream" ] let loginStatus = checkLoginStatus() if loginStatus.login { headers.add(name: "Authorization", value: loginStatus.token) } AF.upload(file, to: api,headers: headers) .uploadProgress { progress in progressHandler(progress.fractionCompleted) } .validate().responseDecodable(of: HTTPBinResponse.self) { response in completion(response.result) } }