Jsem nováček SwiftUI developer, a mám problém vytvoření zobrazení, které dynamicky představuje různé sběrači na základě předchozí výběr uživatele v prohlížení. Vidět problém, spusťte následující kód v Simulátoru, změnit pickerOneSelection, aby "Picker Tři", pak jej změnit ZPĚT na "Výběr Dva" a pokus o změnu pickerTwoSelection. Aplikace bude okamžitě zhroutí; konkrétní chyby s touto hračkou příkladem je "Závitu 1: EXC_BAD_ACCESS (kód=1, address=0x8)". Žádné pochopení, je velmi vítaná!
Jako stranou, díval jsem se na tyto otázky: (SwiftUI hierarchické Sběrač s dynamic data pády) a (swiftUi : 2 Sběrače na jedné obrazovce - app havárie s "Index out of range"), ale pokud je to možné, rád bych, aby se zabránilo konverzi můj výběr řetězec proměnné (pickerOneSelection, pickerThreeSelection) na celá čísla, která pak musí být přeloženy zpět do řetězce, aby se text asociovaný s uživateli na výběr. Pokud to není možné, aby to, co se snažím dělat bez indexu proměnné, pokud byste mi mohl pomoci pochopit, proč, to by bylo velmi užitečné.
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
Mnohokrát děkuji za vaši pomoc a odborné znalosti!