Прежде всего, типы Codable
для разбора вышеуказанных ответов 2 JSON должны выглядеть так:
struct Movie: Decodable {
let movie: String
let director: String
}
struct Valid: Decodable {
let apiKey: String
}
Нет необходимости явно создать init()
. Codable
будет обрабатывать это автоматически.
Далее вам нужно создать еще один тип Codable
, который может обрабатывать оба ответа, т.е.
enum Response: Decodable {
case movie(Movie)
case valid(Valid)
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
do {
let data = try container.decode(Movie.self)
self = .movie(data)
} catch {
let data = try container.decode(Valid.self)
self = .valid(data)
}
}
}
Теперь вы можете проанализировать JSON data
вот так,
do {
let response = try JSONDecoder().decode(Response.self, from: data)
print(response)
} catch {
print(error)
}