ios - 如何从 NSError 代码中找到错误描述?
问题描述
我试图找到一种更简单/更可靠的方法来从错误代码中找出 NSError 的本地化描述,而不是谷歌搜索它。
例如,我知道 NSURLErrorDomain 代码 -1003 对应于“找不到具有指定主机名的服务器”。但是,如果我尝试在代码中对其进行验证,则它不匹配。
let error = NSError(domain: "NSURLErrorDomain", code: -1003)
print(error.localizedDescription)
// "The operation couldn’t be completed. (NSURLErrorDomain error -1003.)"
在文档中查找 -1003也不匹配:“无法解析 URL 的主机名。”
因此,我正在寻找一种方法来从带有函数的错误代码或具有我期望的描述的文档中找出描述。我希望有一个类似于HTTPURLResponse.localizedString(forStatusCode:)
解决方案
当您像这样创建自己的NSError
对象时,它localizedDescription
不会为您生成。但是,当URLSession
生成错误对象时,会填充本地化描述:
let url = URL(string: "https://bad.domain")!
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error as? URLError {
print(error.localizedDescription) // “A server with the specified hostname could not be found.”
}
}.resume()
因此,如果您有错误并想查看本地化描述,请执行此操作。NSError
如果您手动创建自己的对象,它根本不起作用。
但一般来说,我们不会担心本地化描述,而是会测试 的各种code
值URLError
,寻找 的code
a .cannotFindHost
:
let url = URL(string: "https://bad.domain")!
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error as? URLError {
switch error.code {
case .cannotFindHost: print("cannotFindHost")
case .cancelled: print("cancelled")
case .badURL: print("badURL")
// ...
default: break
}
}
}.resume()
或者,您也可以NSURLError
使用 搜索旧代码值NSError
,寻找NSURLErrorCannotFindHost
:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error as NSError? {
switch error.code {
case NSURLErrorCannotFindHost: print("cannotFindHost")
case NSURLErrorCancelled: print("cancelled")
case NSURLErrorBadURL: print("badURL")
// ...
default: break
}
}
}.resume()
您也可以通过按shift- command- O(字母“哦”)“快速打开”,搜索NSURLError
,取消选中快速打开对话框右上角的“Swift”按钮:
打开NSURLError.h
文件时,您可以看到那里列出的所有代码。
NSError
但是,不,仅仅通过使用指定的域和代码创建一个,并localizedDescription
不会神奇地为您填充。URLSession
但是,创建带有描述的正确错误对象。
推荐阅读
- azure - 如何使用 ARM 模板列出租户的所有订阅名称?
- vb.net - 首次单击后禁用按钮单击
- java - SLF4J:对类型为 [java.util.ArrayList] 的对象的 toString() 调用失败
- amazon-web-services - 用于本地应用程序的 Amazon 机密管理器/Azure Key Vault
- ios - Swift:按下按钮时更改 UIButton backgroundColor?
- java - 业务和数据库对象之间的继承
- typescript - 将隐式键和值类型关系传递给 TypeScript 泛型
- apache-spark - 比较记录数
- python - 如何使用元组列表管理字典
- angular - 订阅和承诺中添加了超时