|
import SwiftUI |
|
|
|
struct CarDetail: Identifiable { |
|
var id = UUID() |
|
var info: String |
|
} |
|
|
|
struct CarYear: Identifiable { |
|
var id = UUID() |
|
var info: String |
|
var detail: CarDetail |
|
} |
|
|
|
struct CarModel: Identifiable { |
|
var id = UUID() |
|
var info: String |
|
var carYear: CarYear |
|
} |
|
|
|
struct CarMake: Identifiable { |
|
var id = UUID() |
|
var info: String |
|
var carModel: CarModel |
|
} |
|
|
|
struct Car: Identifiable { |
|
var id = UUID() |
|
var info: String |
|
var carMake: CarMake |
|
} |
|
|
|
class CarDatabase: ObservableObject { |
|
@Published var cars: [Car] |
|
|
|
init() { |
|
let carDetail = CarDetail(info: "Heck of a car") |
|
let carYear = CarYear(info: "88", detail: carDetail) |
|
let carModel = CarModel(info: "Royale", carYear: carYear) |
|
let carMake = CarMake(info: "Oldsmobile", carModel: carModel) |
|
let car = Car(info: "My first car", carMake: carMake) |
|
cars = [car] |
|
} |
|
} |
|
|
|
@main |
|
struct MyApp: App { |
|
@StateObject var database = CarDatabase() |
|
var body: some Scene { |
|
WindowGroup { |
|
ContentView() |
|
.environmentObject(database) |
|
} |
|
} |
|
} |
|
|
|
struct ContentView: View { |
|
@EnvironmentObject var database: CarDatabase |
|
|
|
var body: some View { |
|
NavigationStack { |
|
List(database.cars) { car in |
|
NavigationLink(car.info) { |
|
CarMakeView(carMake: car.carMake) |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
struct CarMakeView: View { |
|
let carMake: CarMake |
|
var body: some View { |
|
VStack { |
|
NavigationLink(carMake.info) { |
|
CarModelView(carModel: carMake.carModel) |
|
} |
|
} |
|
} |
|
} |
|
|
|
struct CarModelView: View { |
|
let carModel: CarModel |
|
|
|
var body: some View { |
|
VStack { |
|
NavigationLink(carModel.info) { |
|
CarYearView(carYear: carModel.carYear) |
|
} |
|
} |
|
} |
|
} |
|
|
|
struct CarYearView: View { |
|
let carYear: CarYear |
|
|
|
var body: some View { |
|
VStack { |
|
NavigationLink(carYear.info) { |
|
CarDetailView(carDetail: carYear.detail) |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
struct CarDetailView: View { |
|
let carDetail: CarDetail |
|
|
|
var body: some View { |
|
VStack { |
|
Text(carDetail.info) |
|
} |
|
} |
|
} |