Метод JSONDecoder.decode не выдает ошибку, когда входящий JSON не соответствует типу данных.
У меня есть такая модель данных, которая отображает JSON в профиль пользователя:
struct DrivetimeUserProfile: Codable {
var driverId: String?
var name: String?
var email: String?
var phoneNumber: String?
var city: String?
var state: String?
var experience: Int?
private enum CodingKeys: String, CodingKey {
case driverId = "driver_id"
case name = "name"
case email = "email"
case phoneNumber = "phone"
case city = "city"
case state = "state"
case experience = "experience"
}
}
Если имя пользователя или пароль неверны, сервер вернет JSON, подобный этому \"Failure\":\"Enter correct username and password.\"
.Который не сопоставляется с моделью данных профиля пользователя и JSONDecoder (). Decode не выдает ошибку
Вот полная реализация:
func loginUser(from url: URL, with username: String, and password: String, completionHandler: @escaping (DrivetimeUserProfile?, DrivetimeAPIError.LoginError?) -> Void) {
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = cachePolicy
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let query = "email=\(username)&password=\(password)"
request.httpBody = query.data(using: .utf8)
let task = session.dataTask(with: request) { (data, response, error) in
guard let data = data else {
completionHandler(nil, .EmptyData)
return
}
do {
let userProfile = try JSONDecoder().decode(DrivetimeUserProfile.self, from: data)
self.userProfile = userProfile
completionHandler(userProfile, nil)
} catch (let error) {
completionHandler(nil, .CannotDecodeJson)
}
}
task.resume()
}
Мне нужен этот обработчик завершениячтобы зафиксировать выданную ошибку, чтобы я мог предупредить пользователя в моем контроллере представления о том, что это за ошибка.Пожалуйста, совет
Спасибо