Eu sunt un novice SwiftUI producător, și am probleme în a crea o imagine dinamic prezintă diferite culegătorii pe baza unui utilizator anterior de selecție din acest punct de vedere. Pentru a vedea problema, executați următorul cod în Simulator, schimba pickerOneSelection la "Selector de Trei", apoi schimba-l ÎNAPOI la "Selector de Două" și încercarea de a schimba pickerTwoSelection. Aplicația va prăbuși imediat; specifice de eroare cu această jucărie exemplu este "Filet 1: EXC_BAD_ACCESS (cod=1, adresa=0x8)". Orice înțelegere este cel mai bun venit!
Ca o paranteza, m-am uitat la aceste întrebări: (SwiftUI ierarhic Selector cu date dinamice accidente) și (swiftUi : 2 Culegătorii de pe un singur ecran - app accident cu "Index out of range"), dar dacă este posibil, aș dori să evite transformarea mea șir de selecție variabile (pickerOneSelection, pickerThreeSelection) în numere întregi, care apoi trebuie să fie tradusă în siruri de caractere pentru a obține textul asociat cu selecția utilizatorului. Dacă nu e posibil să facem ceea ce am încercat să fac fără indicelui variabile, dacă mă poți ajuta să înțeleg de ce, că ar fi foarte util.
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
Multe mulțumiri pentru ajutorul și expertiza!