Skip to content

Instantly share code, notes, and snippets.

@simrandotdev
Created August 15, 2020 00:54
Show Gist options
  • Select an option

  • Save simrandotdev/397993a0d99f052320ee5c83eb1defa5 to your computer and use it in GitHub Desktop.

Select an option

Save simrandotdev/397993a0d99f052320ee5c83eb1defa5 to your computer and use it in GitHub Desktop.
//
// Order.swift
// Project05_Cupcakes
//
// Created by jc on 2020-08-13.
// Copyright © 2020 jc. All rights reserved.
//
import Foundation
class Order: ObservableObject, Codable {
static let types = ["Vanilla", "Strawberry", "Chocolate", "Rainbow"]
@Published var type = 0
@Published var quantity = 1
@Published var specialRequestEnabled = false {
didSet {
if specialRequestEnabled == false {
extraFrosting = false
addSprinkles = false
}
}
}
@Published var extraFrosting = false
@Published var addSprinkles = false
// Address
@Published var name = ""
@Published var streetAddress = ""
@Published var city = ""
@Published var zip = ""
// Computer Properties
var hasValidAddress: Bool {
if name.isEmpty || streetAddress.isEmpty || city.isEmpty || zip.isEmpty { return false }
return true
}
var cost: Double {
// $2 per cake
var cost = Double(quantity) * 2
// complicated cakes cost more
cost += (Double(type) / 2)
// $1/cake for extra frosting
if extraFrosting { cost += Double(quantity) }
// $0.50/cake for sprinkles
if addSprinkles { cost += Double(quantity) / 2 }
return cost
}
enum CodingKeys: CodingKey {
case type, quantity, extraFrosting, addSprinkles, name, streetAddress, city, zip
}
init() { }
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
type = try container.decode(Int.self, forKey: .type)
quantity = try container.decode(Int.self, forKey: .quantity)
extraFrosting = try container.decode(Bool.self, forKey: .extraFrosting)
addSprinkles = try container.decode(Bool.self, forKey: .addSprinkles)
name = try container.decode(String.self, forKey: .name)
streetAddress = try container.decode(String.self, forKey: .streetAddress)
city = try container.decode(String.self, forKey: .city)
zip = try container.decode(String.self, forKey: .zip)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(type, forKey: .type)
try container.encode(quantity, forKey: .quantity)
try container.encode(extraFrosting, forKey: .extraFrosting)
try container.encode(addSprinkles, forKey: .addSprinkles)
try container.encode(name, forKey: .name)
try container.encode(streetAddress, forKey: .streetAddress)
try container.encode(city, forKey: .city)
try container.encode(zip, forKey: .zip)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment