Вперед, исходная размещенная структура данных не соответствует и не является возвращаемым объектом JSON
{
Code = 0;
Message = "Login Fail";
}
Преобразовано в JSON
{
"Code" : 0,
"Message" : "Login Fail"
}
с этим Swift 4 имеет очень хороший протокол, называемый Decodable
и JSONDecoder
. Это новые для Foundation
.
Шаг 1. Создайте структуру или класс, соответствующий Decodable
struct ErrorResponse: Decodable {
var code: String?
var message: String?
enum CodingKeys : String, CodingKey {
case code = "Code"
case message = "Message"
}
}
Альтернативное объявление, не использующее необязательные значения
struct ErrorResponse: Decodable {
var code: String
var message: String
enum CodingKeys : String, CodingKey {
case code = "Code"
case message = "Message"
}
}
Apple также приводит множество примеров правильного использования Decodable
и CodingKey
здесь
Уведомление : как использовать CodingKeys
здесь для обозначения свойств, находящихся в нижнем регистре, но получаемых с сервера, в верхнем регистре. Вы можете использовать CodingKey
для кодирования и декодирования свойств по вашему собственному соглашению об именах.
Шаг 2. Использование JSONDecoder
guard let responseError = try? JSONDecoder().decode(ErrorResponse.self, from: data) else {
print("Error: Could not parse JSON")
return
}
print("code: \(responseError.code)")
print("message: \(responseError.message)")