Skip to content

Instantly share code, notes, and snippets.

@Stoff81
Last active August 28, 2019 01:34
Show Gist options
  • Save Stoff81/1a89f149f19cbe564901ca7944bac63a to your computer and use it in GitHub Desktop.
Save Stoff81/1a89f149f19cbe564901ca7944bac63a to your computer and use it in GitHub Desktop.
struct Drinks: Decodable {
let drinks: [Drink]
enum DrinksKey: CodingKey {
case drinks
}
enum DrinkTypeKey: CodingKey {
case type
}
enum DrinkTypes: String, Decodable {
case water = "water"
case orangeJuice = "orange_juice"
case beer = "beer"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: DrinksKey.self)
var drinksArrayForType = try container.nestedUnkeyedContainer(forKey: DrinksKey.drinks)
var drinks = [Drink]()
var drinksArray = drinksArrayForType
while(!drinksArrayForType.isAtEnd) {
let drink = try drinksArrayForType.nestedContainer(keyedBy: DrinkTypeKey.self)
let type = try drink.decode(DrinkTypes.self, forKey: DrinkTypeKey.type)
switch type {
case .water, .orangeJuice:
print("found drink")
drinks.append(try drinksArray.decode(Drink.self))
case .beer:
print("found beer")
drinks.append(try drinksArray.decode(Beer.self))
}
}
self.drinks = drinks
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment