Для отслеживания ошибок сервера от API Restfull Api на SwiftUI IOS Приложение Я передаю сообщение об ошибке из NSData параметру "reason" следующего перечисления NetworkErrors:
enum NetworkError: Error {
case domainError(reason:String)
case decodingError(reason:String)
case encodingError(reason:String)
}
Ошибка причина указывается при декодировании ответа NSURLSession:
static func postRequest<T:Decodable, U:Codable>(_ endpoint:String, _ input:U?, completion: @escaping (Result<T,NetworkError>) -> Void) {
...
do {
let retval = try JSONDecoder().decode(T.self, from: data)
completion(.success(retval))
} catch let DecodingError.dataCorrupted(context) {
let responseData = String(data: data, encoding: String.Encoding.utf8)
completion(.failure(.decodingError(reason: responseData ?? "Data corrupted from response")))
} catch {
...
}
...
}
Причина ошибки должна быть доступна в следующем коде, но я могу только напечатать localizedDescription:
Button(action:{
self.postRequest(endpoint, self.value){ (result: Result<Bool,NetworkError>) in
switch result {
case .success:
print("value saved successfully")
case .failure(let error):
print("failure to save value")
print(error.localizedDescription)
}
}
}){
Image(systemName:"icloud.and.arrow.up")
}