// // FruitBaskets.swift // Samples // // Created by VikasK on 20/06/24. // Copyright © 2024 Vikaskore Software. All rights reserved. // import SwiftUI enum Fruit { case apple case orange } enum BasketLabel: String { case apples = "Apples" case oranges = "Oranges" case mixture = "Mixture" } class Basket { var label: BasketLabel var contents: [Fruit] init(label: BasketLabel, contents: [Fruit]) { self.label = label self.contents = contents } func pickOneFruit() -> Fruit { return contents.first! } } struct FruitBaskets: View { @State private var correctLabels: [BasketLabel: BasketLabel] = [:] @State private var baskets: [Basket] = [ Basket(label: .apples, contents: [.apple, .orange]), Basket(label: .oranges, contents: [.apple, .orange]), Basket(label: .mixture, contents: [.orange]) ] @State private var showResult = false var body: some View { VStack { Text("Basket Labeling Puzzle") .font(.largeTitle) .padding() ForEach(baskets, id: \.label) { basket in HStack { Text("Basket labeled \(basket.label.rawValue)") Button(role: .none) { self.solvePuzzle(byPickingFrom: basket) } label: { Text("Pick a fruit") } .padding() .background(Color.blue) .foregroundColor(.white) } .padding() } if showResult { VStack { Text("Correct Labels:") .font(.title2) ForEach(BasketLabel.allCases, id: \.self) { label in if let correctLabel = correctLabels[label] { Text("The basket labeled \(label.rawValue) should actually be labeled \(correctLabel.rawValue)") } } } .padding() } } } func solvePuzzle(byPickingFrom basket: Basket) { let pickedFruit = basket.pickOneFruit() if pickedFruit == .apple { correctLabels[.mixture] = .apples correctLabels[.oranges] = .mixture correctLabels[.apples] = .oranges } else { correctLabels[.mixture] = .oranges correctLabels[.apples] = .mixture correctLabels[.oranges] = .apples } showResult = true } } extension BasketLabel: CaseIterable {} #Preview { FruitBaskets() }