Start 100DaysOfSwiftUI from 2020.Mar.18th.
Day 49, 50, 51, 52: Project10 part one/two/three/four
done with 3 hours
New findings: followings are new findings
- because struct Response is not used in ContentView, so need to adjust decode code
- maybe misssed to add specialRequestEnabled flag in sample code, but it might be assumed with other info.
following a code for getting song data of Taylor Swift (with using Xcode 11.4)
1 2 3 4 |
// self.results = decodedResponse for eachResponse in decodedResponse.results { self.results.append(eachResponse) } |
here is the code after challenges
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
struct ContentView: View { @ObservedObject var order = Order() var body: some View { NavigationView { Form { Section { Picker("Select your cake type", selection: $order.type) { ForEach(0..<Order.types.count, id: \.self) { Text(Order.types[$0]) } } Stepper(value: $order.quantity, in: 3...20) { Text("Number of cakes: \(order.quantity)") } } Section { Toggle(isOn: $order.specialRequestEnabled.animation()) { Text("Any special requests?") } if order.specialRequestEnabled { Toggle(isOn: $order.extraFrosting) { Text("Add extra frosting") } Toggle(isOn: $order.addSprinkles) { Text("Add extra sprinkles") } } } Section { NavigationLink(destination: AddressView(order: order) ) { Text("Delivery details") } } } .navigationBarTitle("Cupcake Corner") } } } class Order: ObservableObject, Codable { static let types = ["Vanilla", "Strawberry", "Chocolate", "Rainbow"] @Published var type = 0 @Published var quantity = 3 @Published var specialRequestEnabled = false { didSet { if specialRequestEnabled == false { extraFrosting = false addSprinkles = false } } } @Published var extraFrosting = false @Published var addSprinkles = false @Published var name = "" @Published var streetAddress = "" @Published var city = "" @Published var zip = "" var hasValidAddress: Bool { if name.isEmpty || streetAddress.isEmpty || city.isEmpty || zip.isEmpty { return false } if ( name.trimmingCharacters(in: .whitespacesAndNewlines) == "" || streetAddress.trimmingCharacters(in: .whitespacesAndNewlines) == "" || city.trimmingCharacters(in: .whitespacesAndNewlines) == "" || zip.trimmingCharacters(in: .whitespacesAndNewlines) == "") { return false } return true } ... } |
Sponsor Link