标签: alamofire5

将 Alamofire 完成处理程序转换为异步/等待 | 斯威夫特 5.5,*

我有当前有效的功能。我将它与完成处理程序一起使用:

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)

swift alamofire alamofire-request swiftui alamofire5

7
推荐指数
2
解决办法
1万
查看次数

获取分段上传 Alamofire5 的上传进度

在 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问题,但没有一个工作。

swift alamofire alamofire5

6
推荐指数
2
解决办法
686
查看次数

如何使用 alamofire 重试失败的请求?

在没有连接的情况下,我将失败的请求附加到队列管理器(包含数组)

我正在呈现一个带有重试按钮的自定义弹出窗口。当按下重试按钮时,我想重试在无连接状态下无法发送的请求。可能有多个请求。

当我尝试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)

ios swift alamofire alamofire-request alamofire5

6
推荐指数
0
解决办法
1175
查看次数

如何解码 Alamofire 5 中的错误正文?

我正在尝试将我的项目从 Alamofire 4.9 迁移到 5.3,但我在错误处理方面遇到了困难。我想Decodable尽可能多地使用,但当一切顺利时,我的 API 端点返回一个 JSON 结构,而当出现错误时,我的 API 端点返回一个不同的 JSON 结构,所有端点上的所有错误都相同。Codable我的代码中对应的是ApiError.

我想创建一个自定义响应序列化器,它可以给我一个Result<T, ApiError>而不是默认的Result<T, AFError>. 我发现这篇文章似乎解释了一般过程,但其中的代码无法编译。

我怎样才能创建这样的自定义ResponseSerializer

swift alamofire alamofire5

5
推荐指数
1
解决办法
2594
查看次数

Alamofire EmptyResponseCodes 不起作用

端点以代码 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)

ios swift alamofire alamofire5

3
推荐指数
1
解决办法
1229
查看次数

标签 统计

alamofire ×5

alamofire5 ×5

swift ×5

alamofire-request ×2

ios ×2

swiftui ×1