当您像这样创建自己的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 值,寻找.cannotFindHost 的code:
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()
或者,您也可以使用NSError 搜索旧的NSURLError 代码值,寻找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(字母“哦”)“快速打开”,搜索@987654341 @,取消选中快速打开对话框右上角的“Swift”按钮:
当您打开NSURLError.h 文件时,您可以看到其中列出的所有代码。
但是,不,只是通过使用指定的域和代码创建 NSError,localizedDescription 不会为您神奇地填充。不过,URLSession 会创建带有描述的正确错误对象。