Я звоню по некоторым API из моего приложения. Я хотел бы получить и обработать код ошибки. Кажется, есть много информации о том, как получить и обработать коды ответов, но очень мало о коде ошибки. Я хотел бы получить доступ к коду ошибки в случае, скажем, у пользователя нет соединения inte rnet, поэтому вызов 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] Задача <006E7876-214F-41E3-8BDE-26960AF1F554>. <1> завершена с ошибкой [-1009] Ошибка Domain = NSURLErrorDomain Code = -1009 «Соединение Inte rnet, кажется, отключено.» UserInfo = {NSUnderlyingError = 0x283a918f0 {Домен ошибки = kCFErrorDomainCFNetwork Code = -1009 "(null)" UserInfo = {_ kCFStreamErrorCodeKey = 50, _kCFStreamErrorDomainKey = 1}}, 10000KLF = 0 * 100EURINGFailing https://api.sunrise-sunset.org/json?lat=57.5081&lng=-1.7841&date=2020-06-21&formatted=0, _kCFStreamErrorDomainKey = 1, _kCFStreamErrorCodeKey = 50, NSLocalizedDescription = Соединение Inte rnet кажется отключенным.} Ошибка вызова API Astronomical Times с ошибкой Домен ошибки = Код NSURLErrorDomain = -1009 «Соединение Inte rnet не работает». UserInfo = {NSUnderlyingError = 0x283a918f0 {Домен ошибки = kCFErrorDomainCFNetwork Code = -1009 "(null)" UserInfo = {_ kCFStreamErrorCodeKey = 50, _kCFStreamErrorDomainKey = 1}}, 101SeNOFRINGFailing = 1016FLING = 101EFLING = 101EF_Railing https://api.sunrise-sunset.org/json?lat=57.5081&lng=-1.7841&date=2020-06-21&formatted=0, _kCFStreamErrorDomainKey = 1, _kCFStreamErrorCodeKey = 50, NSLocalizedDescription = Inte rnet соединение выглядит как автономное.}
В этом примере я хочу извлечь из этого тот факт, что inte rnet Соединение появляется и сообщается пользователю. Я бы подумал, что будет такая же поддержка для извлечения кода ошибки, как и для извлечения кода результата. Было бы более нормально просто сказать, что произошла ошибка (ее легко обнаружить) и обработать в другом месте (например, не вызывать inte rnet перед вызовом API)? Если да, то для чего я буду охранять?