Follow-up question to iOS14 introducing errors with @State bindings
I was displaying a modal sheet from several options, depending on which button was pressed. However, now in iOS14 I get a fatal error caused by the selectedSpeaker/selectedMicrophone/selectedAmp being nil when the sheet displays. I am trying to change to .sheet(item:, content:) but I can't see how to implement the enum and then pass in the appropriate selected object. This is what I was doing previously:
enum ActiveSheet { case speakerDetails, micDetails, ampDetails, settings } struct FavoritesView: View { @State private var selectedSpeaker: Speaker? @State private var selectedMicrophone: Microphone? @State private var selectedAmp: Amplifier? @State private var showingSheet = false @State private var activeSheet: ActiveSheet = .settings var body: some View { List { Button(action: { self.activeSheet = .settings self.showingSheet = true }, label: { Text("Settings")}) Button(action: { self.activeSheet = .micDetails self.selectedMicrophone = microphones[0] self.showingSheet = true }, label: { Text("Mic 1")}) Button(action: { self.activeSheet = .micDetails self.selectedMicrophone = microphones[1] self.showingSheet = true }, label: { Text("Mic 2")}) Button(action: { self.activeSheet = .speakerDetails self.showingSheet = true self.selectedSpeaker = speakers[0] }, label: { Text("Speaker 1")}) Button(action: { self.activeSheet = .speakerDetails self.showingSheet = true self.selectedSpeaker = speakers[1] }, label: { Text("Speaker 2")}) //and so on for activeSheet = .ampDetails in the same way. } .sheet(isPresented: self.$showingSheet) { if self.activeSheet == .speakerDetails { SpeakerDetailView(speaker: self.selectedSpeaker!) } else if self.activeSheet == .micDetails { MicDetailView(microphone: self.selectedMicrophone!) } else if self.activeSheet == .ampDetails { AmpDetailView(amp: self.selectedAmp!) } else if self.activeSheet == .settings { SettingsView(showSheet: self.$showingSheet)) } } } } }