【发布时间】:2020-06-10 16:28:35
【问题描述】:
我正在从我的应用中调用一些 API。我想获取并处理错误代码。似乎有很多关于如何检索和处理响应代码的信息,但关于错误代码的信息却很少。我想访问错误代码以防万一,假设用户没有互联网连接,因此对 API 的调用失败。我正在使用此代码:
session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in
if let error = error {
print("Tide Station API call failed with error \(error)")
return
}
if let response = response as? HTTPURLResponse {
print("Tide Station API call response is \(response.statusCode)")
}
if let data = data
{
do {
let result = try JSONDecoder().decode(TideStations.self, from: data)
self.tideStations = result.stations
print("\(result.stations.count) Tide Stations successfully loaded")
self.showTideStationsOnMap()
} catch {
print("Error while stations parsing: \(error)")
}
}
}).resume()
当我的设备处于飞行模式时,它会在调试区域中生成以下输出,即我强制 API 调用失败的一种确定方式:(请注意,我在错误处理打印语句中将该区域加粗)
2020-02-26 17:57:58.235368+0000 APITest[5464:2590011] 任务 . 完成错误 [-1009] 错误域 = NSURLErrorDomain 代码 = -1009 "Internet 连接似乎处于脱机状态。" UserInfo={NSUnderlyingError=0x283a918f0 {错误域=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=https://api.sunrise-sunset.org/json?lat=57.5081&lng=-1.7841&date=2020-06-21&formatted=0, NSErrorFailingURLKey=https://api.sunrise-sunset.org/json?lat=57.5081&lng=-1.7841&date=2020-06-21&formatted=0, _kCFStream_ErrorDomainKey=1, =50, NSLocalizedDescription=互联网连接似乎离线。} Astronomical Times API 调用失败并出现错误 Error Domain=NSURLErrorDomain Code=-1009 “Internet 连接似乎处于脱机状态。” UserInfo={NSUnderlyingError=0x283a918f0 {错误域=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=https://api.sunrise-sunset.org/json?lat=57.5081&lng=-1.7841&date=2020-06-21&formatted=0, NSErrorFailingURLKey=https://api.sunrise-sunset.org/json?lat=57.5081&lng=-1.7841&date=2020-06-21&formatted=0, _kCFStream_ErrorDomainKey=1, =50, NSLocalizedDescription=互联网连接似乎离线。}
在这个例子中,我想从中提取互联网连接出现故障的事实并建议用户。我原以为对错误代码提取的支持与对结果代码提取的支持类似。只是说发生了错误(易于检测)并在其他地方处理(例如,在调用 API 之前检测到没有互联网)会更正常吗?如果是这样,我要防备什么叫喊声?
【问题讨论】: