Jestem początkujący programista SwiftUI, i mam problemy z tworzeniem prezentacji, która dynamicznie wyświetla różne środki wyboru na podstawie poprzedniego wyboru użytkownika w tym widoku. Aby zobaczyć problem, uruchom następujący kod w symulatorze, zmień wyboru na "trzy", a następnie zmienić go z POWROTEM na "dwa" i spróbuj zmienić wybór wyboru. Aplikacja natychmiast zakończy pracę; konkretny błąd w tym przykładzie zabawek - "Strumień 1: EXC_BAD_ACCESS (kod=1, adres=0x8)". Wszelkie zrozumienie jest bardzo mile widziane!
Tak na marginesie, ja bym spojrzał na następujące pytania: (SwiftUI hierarchii wyboru z dynamicznymi danymi się zawiesza) i (swiftUi : 2 комплектовщики na jednym ekranie - aplikacja wypadku z "indeks jest spoza zakresu"), ale jeśli to możliwe, chciałbym uniknąć konwersji mojego wiersza wyboru zmiennych (pickerOneSelection, pickerThreeSelection) w liczby, które następnie muszą być przeniesione z powrotem do wiersza, aby uzyskać tekst, związany z wyboru użytkownika. Jeśli nie można zrobić to, co staram się zrobić, bez zmiennych indeksu, jeśli mógłbyś mi pomóc zrozumieć, dlaczego, to byłoby to bardzo przydatne.
import SwiftUI
struct ContentView: View {
@State var pickerOneSelection: String = "Picker Two"
@State var pickerTwoVisible: Bool = false
@State var pickerTwoSelection: Int = 3
@State var pickerThreeSelection: String = "Option 1"
var pickerOneOptions = ["Picker Two", "Picker Three"]
var pickerThreeOptions = ["Option 1", "Option 2", "Option 3"]
var body: some View {
NavigationView {
Form {
Picker("Picker One selection", selection: $pickerOneSelection) {
ForEach(pickerOneOptions, id: \.self) {
Text($0)
}
} // End of Picker 1
if pickerOneSelection == "Picker Two" {
HStack {
Text("Picker Two selection")
Spacer()
Button(String(pickerTwoSelection)) {
self.pickerTwoVisible.toggle()
}
} // End of HStack
if pickerTwoVisible {
Picker("Picker Two", selection: $pickerTwoSelection) {
ForEach(0..<32, id: \.self) {
Text(String($0))
}
}
.pickerStyle(WheelPickerStyle())
} // End of pickerTwoVisible
} else {
Picker("Picker Three selection", selection: $pickerThreeSelection) {
ForEach(pickerThreeOptions, id: \.self) {
Text($0)
}
} // End of Picker 3
}
} // End of Form
} // End of NavigationView
} // End of body
} // End of ContentView
Bardzo dziękuję za waszą pomoc i doświadczenie!