首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提取在Moya中失败的请求的url?

如何提取在Moya中失败的请求的url?
EN

Stack Overflow用户
提问于 2020-03-26 22:09:33
回答 1查看 639关注 0票数 1
代码语言:javascript
运行
复制
    provider.request(.getRoot) { result in
        switch result {
        case .success(let response):
            print ("root \(response)")
            //            let response = try? response.mapObject(FolderResponse.self)
        //            print ("root \(response) \(response)")
        case .failure(let error):
            let r = result.0.request how do I get the request url from this context???
           ^^^^^^^^^^^^^^^^^^
            print("BaseURL: \(r)" + (error.errorDescription ?? "Unknown error"))
        }
    }

那么mapObject是从哪里来的呢?我要将响应映射到一个结构中(如果需要,可以使该结构可编码)

EN

回答 1

Stack Overflow用户

发布于 2020-03-26 22:32:42

moya的回应是Result<Moya.Response, MoyaError>

failure中,您有一个MoyaError对象,即Enum,您只需使用switch - case即可获得所有错误选项

代码语言:javascript
运行
复制
// A type representing possible errors Moya can throw.

public enum MoyaError: Swift.Error {

    /// Indicates a response failed to map to an image.
    case imageMapping(Response)

    /// Indicates a response failed to map to a JSON structure.
    case jsonMapping(Response)

    /// Indicates a response failed to map to a String.
    case stringMapping(Response)

    /// Indicates a response failed to map to a Decodable object.
    case objectMapping(Swift.Error, Response)

    /// Indicates that Encodable couldn't be encoded into Data
    case encodableMapping(Swift.Error)

    /// Indicates a response failed with an invalid HTTP status code.
    case statusCode(Response)

    /// Indicates a response failed due to an underlying `Error`.
    case underlying(Swift.Error, Response?)

    /// Indicates that an `Endpoint` failed to map to a `URLRequest`.
    case requestMapping(String)

    /// Indicates that an `Endpoint` failed to encode the parameters for the `URLRequest`.
    case parameterEncoding(Swift.Error)
}

所以你可以像那样处理moya错误

代码语言:javascript
运行
复制
provider.request(.getRoot) { result in
    switch result {
    case .success(let response):
        print ("root \(response)")
        //            let response = try? response.mapObject(FolderResponse.self)
    //            print ("root \(response) \(response)")
    case .failure(let error):
       self.handleMoyaError(error)
    }
}



//  here you canc heck all of this error
private func handleMoyaError(_ moyaError : MoyaError){

    switch moyaError {
    case let .statusCode(response):
        print(response.request?.url)
    case  .underlying(let nsError as NSError, let response): break
        // nsError  have URL  timeOut , no connection and cancel request
        //  just use response to map  of there is error
    default: break

    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60869174

复制
相关文章

相似问题

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