我有当前有效的功能。我将它与完成处理程序一起使用:
func getTokenBalances(completion: @escaping (Bool) -> Void) {
guard let url = URL(string: "someApiUrlFromLostandFound") else {
print("Invalid URL")
completion(false)
return
}
AF.request(url, method: .get).validate().responseData(completionHandler: { data in
do {
guard let data = data.data else {
print("Response Error:", data.error as Any)
completion(false)
return
}
let apiJsonData = try JSONDecoder().decode(TokenBalanceClassAModel.self, from: data)
DispatchQueue.main.async {
self.getTokenBalancesModel = apiJsonData.data.items
completion(true)
}
} catch {
print("ERROR:", error)
completion(false)
}
})
}
Run Code Online (Sandbox Code Playgroud)
如何将其转换为 swift 5.5 的新 async/await 功能?
这是我尝试过的:
func getTokenBalances3() async {
let url …Run Code Online (Sandbox Code Playgroud) 在 Alamofire5 之前,我们可以使用 uploadRequest 的 encodingReresult 来获取uploadProgress. 但是现在在将 Alamofire 上传到版本 5 之后,基于Alamofire 文档,我们可以使用.uploadProgress来获取上传进度处理程序。
这是我的代码:
AF.upload(multipartFormData: { multipartFormData in
multipartFormData.append(fileContent, withName: "file", fileName: filePath.lastPathComponent)
multipartFormData.append(token.data(using: .utf8)!, withName: "token")
}, to: uploadURL)
.uploadProgress { progress in
print(progress)
}
.responseJSON { [weak self] response in
print(response)
}
Run Code Online (Sandbox Code Playgroud)
但是uploadProgress在上传过程中从未调用过关闭。
我检查了很多stackoverflow问题,但没有一个工作。
在没有连接的情况下,我将失败的请求附加到队列管理器(包含数组)
我正在呈现一个带有重试按钮的自定义弹出窗口。当按下重试按钮时,我想重试在无连接状态下无法发送的请求。可能有多个请求。
当我尝试retryRequestAlamofireSession类中的方法时,请求的任务状态保持在 initilazed 或 finish 状态,但必须恢复才能成功发送请求,我该如何解决这种情况?
拦截器接口.swift
public func didGetNoInternetConnection() {
let viewModel = AppPopupViewModel(title: L10n.AppPopUp.areYouOffline, description: L10n.AppPopUp.checkInternetConnection, image: Images.noInternetConnection.image, firstButtonTitle: L10n.General.tryAgain, secondButtonTitle: nil, firstButtonAction: { [weak self] in
guard let self = self else { return }
DispatchQueue.main.async {
self.retry()
}
}, secondButtonAction: nil, dismissCompletion: nil, dimColor: Colors.appGray.color.withAlphaComponent(0.8), showCloseButton: true, customView: nil)
DispatchQueue.main.async {
AppPopupManager.show(with: viewModel, completion: nil)
}
}
private func retry() {
guard let head = NetworkRequestStorage.shared.head else {
return
}
let …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的项目从 Alamofire 4.9 迁移到 5.3,但我在错误处理方面遇到了困难。我想Decodable尽可能多地使用,但当一切顺利时,我的 API 端点返回一个 JSON 结构,而当出现错误时,我的 API 端点返回一个不同的 JSON 结构,所有端点上的所有错误都相同。Codable我的代码中对应的是ApiError.
我想创建一个自定义响应序列化器,它可以给我一个Result<T, ApiError>而不是默认的Result<T, AFError>. 我发现这篇文章似乎解释了一般过程,但其中的代码无法编译。
我怎样才能创建这样的自定义ResponseSerializer?
端点以代码 201 和空响应正文进行响应。查看 Alamofire 文档,只有 204 和 205 响应正文可以为空。有一个解决方案,我们可以指定结果为空的状态代码。添加了一组
emptyResponseCodes: [200, 201, 202, 203, 204, 205]
发送请求后,我仍然收到错误!= nil 我在这里做错了什么?
responseDecodable(of: TResult.self,
decoder: self.jsonDecoder,
emptyResponseCodes: [200, 201, 202, 203, 204, 205],
completionHandler: { (response: DataResponse<TResult, AFError>) in
if let error = response.error {
taskCompletionSource.set(error: error)
} else if let result = response.value {
taskCompletionSource.set(result: result)
} else {
taskCompletionSource.set(result: EmptyCodable())
}
Run Code Online (Sandbox Code Playgroud)