Im fairly new to SwiftUI and Im trying to build a small game to get used to the syntax but I have the problem that I created a class and created 3 instances in the @main struct but when I try to use them in my View they all turn into the first instance
Class:
import Foundation
class WorkSpace: ObservableObject {
var title: String
var income: Int
init(title: String, income: Int) {
self.title = title
self.income = income
}
}
@Main struct:
import SwiftUI
@main
struct LifeSimulationApp: App {
@StateObject var doctor = WorkSpace(title: "Doctor", income: 60000)
@StateObject var lawyer = WorkSpace(title: "Lawyer", income: 50000)
@StateObject var carseller = WorkSpace(title: "Car Seller", income: 30000)
@StateObject var player = MainPlayer()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(doctor)
.environmentObject(lawyer)
.environmentObject(carseller)
.environmentObject(player)
}
}
}
View:
import SwiftUI
struct OccupationView: View {
@EnvironmentObject var doctor: WorkSpace
@EnvironmentObject var lawyer: WorkSpace
@EnvironmentObject var carseller: WorkSpace
@EnvironmentObject var player: MainPlayer
var body: some View {
NavigationView {
Form {
HStack {
Image(systemName: "text.book.closed.fill")
.resizable()
.frame(width: 50, height: 50)
.foregroundColor(.blue)
.padding()
Spacer()
Text(player.occupation)
.font(.title)
.padding()
Spacer()
}
Section {
Toggle("(doctor.title) ((doctor.income)€)", isOn: $player.isDoctorOn)
Toggle("(lawyer.title) ((lawyer.income)€)", isOn: $player.isLawyerOn)
Toggle("(carseller.title) ((carseller.income)€)", isOn: $player.isCarsellerOn)
}
}
.navigationTitle(player.name)
}
}
}
struct OccupationView_Previews: PreviewProvider {
static var previews: some View {
OccupationView()
.environmentObject(MainPlayer())
.environmentObject(WorkSpace(title: "Doctor", income: 60000))
.environmentObject(WorkSpace(title: "Lawyer", income: 50000))
.environmentObject(WorkSpace(title: "Car Seller", income: 30000))
}
}
Preview:
enter image description here
New contributor
KatMood is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.