当前位置: 首页 > 知识库问答 >
问题:

Alamofire错误。LocalizedDescription-无法完成操作

杨晓博
2023-03-14

我试图在出现错误的情况下通过AlaMofires的回调访问 属性

我有一个枚举,它处理 类型,特别类似于Alamofire文档

enum BackendAPIErrorManager: Error {
case network(error: Error)
case apiProvidedError(reason: String) // this causes me problems
...
}

在我的请求中,如果有错误,我将适用的错误存储到Alamofire提供的 案例中,如下所示:

private func resultsFromResponse(response: DataResponse<Any>) -> Result<Object> {
    guard response.result.error == nil else {
        print(response.result.error!)
        return .failure(BackendAPIErrorManager.network(error: response.result.error!))
    }

    if let jsonDictionary = response.result.value as? [String: Any], let errorMessage = jsonDictionary["error"] as? String, let errorDescription = jsonDictionary["error_description"] as? String  {
        print("\(errorMessage): \(errorDescription)")
        return .failure(BackendAPIErrorManager.apiProvidedError(reason: errorDescription))
    }
    ....
}

调用该方法时:

func performRequest(completionHandler: @escaping (Result<someObject>) -> Void) {
    Alamofire.request("my.endpoint").responseJSON {
        response in

        let result = resultsFromResponse(response: response)
        completionHandler(result)
    }
}

然后,当我调用 方法时,我检查完成处理程序中的错误:

performRequest { result in 
    guard result.error == nil else {
        print("Error \(result.error!)") // This works 
        //prints apiProvidedError("Error message populated here that I want to log")

        print(result.error!.localizedDescription) // This gives me the below error 
    }
}

如果出现返回 的错误,我将收到以下错误

如何从返回的错误中获取 值?我试过 ,但没有成功。任何帮助都太好了!

共有1个答案

齐典
2023-03-14

要能够在符合 协议的自定义 上调用 ,您将需要添加以下代码:

extension BackendAPIErrorManager: LocalizedError {
  var errorDescription: String? {
    switch self {
      case .apiProvidedError:
        return reason
    }
  }
}

原因有点模糊(因为关于 协议如何工作的文档还不是太详细),但基本上,在Swift3中,要能够提供本地化的错误描述(和其他相关信息),您需要遵守新的 协议。

您可以在这里找到更多细节:如何在Swift中提供带有错误类型的本地化描述?

 类似资料:
  • 当我运行模拟器时,以下错误显示为警报: 操作无法完成。(LaunchServicesError错误0。) 我试过很多关于堆栈溢出的答案,但它们对我都不起作用。 Feb 18 14:48:12 com.apple.dt.xcode[32825]:错误域=LaunchServicesError Code=0“(null)”userInfo={Error=MissingBundleExecutable,

  • 问题内容: 像这样的代码: 问题答案: 不适用于我。最好在 Alamofire中 使用这样的代码:

  • 问题内容: 我已经从Rich Faces 3.3升级到Rich Faces 4.2,因为Ajax不适用于IE9。现在它仍然不起作用。 收到响应后,IE会收到一个JS错误 “ SCRIPT58734:从源头上来的东西”:c00ce56e。 在尝试时 在jsf.js.html?ln = javax.faces&conversationContext = 2,第1行第21747行 我认为是因为HTTP标

  • HTML 它在Chrome上运行良好,生成电影标题,但会出现错误 和 而无法完成操作。

  • 我为从iOS设备上传视频到facebook编写了以下代码。 这给我带来了错误 操作无法完成。(错误 5。 我不知道facebook有什么问题。它上传图片和文字,但在视频中它会出现这个错误。 注意: 这是不是因为发送一次又一次,因为我也通过建立新帐户和重置设备测试iOS。 sample.mov也存在,并与图形api,但问题是这个SDK。 谢谢。

  • 问题内容: 我正在使用AFNetworking库通过POST方法在服务器上发布数据。 以下是我的代码 但是我得到以下错误响应 我不明白代码有什么问题。 问题答案: 问题来自响应解析。您正在尝试反序列化响应(必须包含在a 或中),但是您的响应不是以上所有(很可能是简单的字符串)。 另外,尝试将“允许片段”设置为响应序列化程序。