如何解决如何从 NSError 代码中找到错误描述?
我试图找到一种比 Google 搜索更简单/更可靠的方法来从错误代码中找出 NSError 的本地化描述。
例如,我知道 NSURLErrorDomain 代码 -1003 对应于“无法找到具有指定主机名的服务器”。但是,如果我尝试在代码中对其进行验证,则它不匹配。
let error = NSError(domain: "NSURLErrorDomain",code: -1003)
print(error.localizedDescription)
// "The operation Couldn’t be completed. (NSURLErrorDomain error -1003.)"
在 documentation 中查找 -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
对象,它根本无法工作。
但通常,我们不会担心本地化描述,而是测试 URLError
的各种 code
值,寻找 code
的 .cannotFindHost
:
let url = URL(string: "https://bad.domain")!
URLSession.shared.dataTask(with: url) { data,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,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(字母“哦”)来“快速打开”,搜索{{ 1}},取消勾选快速打开对话框右上角的“Swift”按钮:
当您打开 NSURLError
文件时,您可以看到其中列出的所有代码。
但是,不,仅通过使用指定的域和代码创建 NSURLError.h
,NSError
不会为您神奇地填充。不过,localizedDescription
会创建带有描述的正确错误对象。
不,大多数事情都没有自动查找(使用 SecCopyErrorMessageString 来查找安全性错误,但一般不会)。你必须检查标题。这是在 NSURLError.h 中:
NSURLErrorCannotFindHost = -1003,
通常,您要查找的字符串将在 NSError 的 userInfo 中,并由生成错误的事物放置在那里。它不会从代码中查找。当 userInfo 中没有消息时,localizedDescription
的默认值是写“操作无法完成...”
我不相信有任何内置方法可以“像系统那样”生成错误。 (这将非常依赖于子系统,因为 URLErrors 有很多键需要填写,这些键不适用于其他类型的错误。)
,伙计们,我想包含此链接供其他人参考,因为他们正在尝试识别特定的错误代码编号。 Error Codes provided by the Swift.org open source project on GitHub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。