首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Alamofire +组合:获取HTTP响应状态代码

Alamofire +组合:获取HTTP响应状态代码
EN

Stack Overflow用户
提问于 2020-12-03 19:38:12
回答 3查看 955关注 0票数 2

我目前正在使用Alamofire,它包含了组合支持,并使用它的方式如下:

代码语言:javascript
复制
    let request = AF.request(endpoint)

    ...
    request
            .publishDecodable(type: T.self, decoder: decoder)
            .value()
            .eraseToAnyPublisher()

这将发布结果和AFError,但是在订阅者的.sink中,我找不到获取HTTP代码的任何地方。在订阅服务器中获取状态代码的最佳方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-04 02:38:01

如果需要响应代码,请不要使用DataPublisher擦除.value()。相反,使用从各种DataResponse方法获得的publish,这些方法包含所有不同的响应信息,包括状态代码。然后,您可以将其.map到您需要的任何类型。

票数 3
EN

Stack Overflow用户

发布于 2021-03-09 01:33:39

For Swift 5.X和Xcode 12.4用于调试,您可以在组合发布服务器(publishDecodable())之前截获响应,并获得其中一些元素,如下所示:

代码语言:javascript
复制
session.request(signedRequest)
    .responseJSON { response in
        print(response.request)  // original URL request
        print(response.response) // URL response
        print(response.data)     // server data
        print(response.result)   // result of response serialization
    }
票数 1
EN

Stack Overflow用户

发布于 2021-12-09 13:02:44

简单的MVVM方式:

代码语言:javascript
复制
func fetchChats() -> AnyPublisher<ChatListModel, AFError> {
     let url = URL(string: "Your_URL")!
     AF.request(url, method: .get)
            .validate()
            .publishDecodable(type: ChatListModel.self)
            .value()
            .receive(on: DispatchQueue.main)
            .eraseToAnyPublisher()
}

稍后在viewModel中

代码语言:javascript
复制
private var subscriptions: Set<AnyCancellable> = []
// some func
      dataManager.fetchChats()
           .sink {[weak self] completion in
            guard let self = self else { return }
            switch completion {
            case .failure(let error):
                switch error.responseCode {
                case 401:
                    //do something with code
                default:
                   print(error.responseCode)
                }
                print("All errors:\(error)")
            case .finished:
                break
            }
        } receiveValue: {[weak self] message in
            guard let self = self else { return }
            self.message = message
        }
        .store(in: &subscriptions)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65132939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档