Created
August 15, 2020 00:54
-
-
Save simrandotdev/397993a0d99f052320ee5c83eb1defa5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // 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