如何从 NSError 代码中找到错误描述?

use*_*800 3 nserror ios nsurlerrordomain

我正在尝试找到一种比 Google 搜索更简单/更可靠的方法来从错误代码中找出 NSError 的本地化描述。

\n

例如,我知道 NSURLErrorDomain 代码 -1003 对应于“无法找到具有指定主机名的服务器”。但如果我尝试在代码中验证它,它不匹配。

\n
let error = NSError(domain: "NSURLErrorDomain", code: -1003)\nprint(error.localizedDescription)\n// "The operation couldn\xe2\x80\x99t be completed. (NSURLErrorDomain error -1003.)"\n
Run Code Online (Sandbox Code Playgroud)\n

在文档中查找 -1003也不匹配:“无法解析 URL 的主机名\xe2\x80\x99。”

\n

因此,我正在寻找一种方法来从带有函数的错误代码中找出描述,或者从具有我期望的描述的文档中找出描述。我希望有一个类似的功能HTTPURLResponse.localizedString(forStatusCode:)

\n

Rob*_*Rob 6

当您像这样创建自己的NSError对象时,localizedDescription不会为您生成该对象。但是,当URLSession生成错误对象时,会填充本地化描述:

\n
let url = URL(string: "https://bad.domain")!\nURLSession.shared.dataTask(with: url) { data, response, error in\n    if let error = error as? URLError {\n        print(error.localizedDescription)  // \xe2\x80\x9cA server with the specified hostname could not be found.\xe2\x80\x9d\n    }\n}.resume()\n
Run Code Online (Sandbox Code Playgroud)\n

因此,如果您遇到错误并想查看本地化描述,只需这样做即可。NSError如果您手动创建自己的对象,它根本不起作用。

\n

但一般来说,我们不会担心本地化描述,而是测试 的各种codeURLError,寻找 的codea .cannotFindHost

\n
let url = URL(string: "https://bad.domain")!\nURLSession.shared.dataTask(with: url) { data, response, error in\n    if let error = error as? URLError {\n        switch error.code {\n        case .cannotFindHost: print("cannotFindHost")\n        case .cancelled:      print("cancelled")\n        case .badURL:         print("badURL")\n        // ...\n        default:              break\n        }\n    }\n}.resume()\n
Run Code Online (Sandbox Code Playgroud)\n

或者,您也可以NSURLError使用 来搜索旧代码值NSError,查找NSURLErrorCannotFindHost

\n
URLSession.shared.dataTask(with: url) { data, response, error in\n    if let error = error as NSError? {\n        switch error.code {\n        case NSURLErrorCannotFindHost: print("cannotFindHost")\n        case NSURLErrorCancelled:      print("cancelled")\n        case NSURLErrorBadURL:         print("badURL")\n        // ...\n        default:                       break\n        }\n    }\n}.resume()\n
Run Code Online (Sandbox Code Playgroud)\n

shift您也可以通过按- command- O(字母 \xe2\x80\x9cOh\xe2\x80\x9d)快速打开 \xe2\x80\x9c ,搜索NSURLError,取消选中 \xe2\x80\x9cSwift\xe2快速打开对话框右上角的\x80\x9d按钮:

\n

在此输入图像描述

\n

当您打开NSURLError.h文件时,您可以看到其中列出的所有代码。

\n

但是,不,仅仅通过创建NSError具有指定域和代码的 ,并localizedDescription不会神奇地为您填充。URLSession不过,会创建带有描述的正确错误对象。

\n