Je suis un novice SwiftUI développeur, et je vais avoir de la difficulté à la création d'un affichage dynamique qui présente les différents sélecteurs de fonction d'un utilisateur sélection précédente de ce point de vue. Pour voir le problème, exécutez le code suivant dans le Simulateur, changer la pickerOneSelection à "Sélecteur de Trois", puis REVENIR à "Sélecteur de Deux" et tenter de changer le pickerTwoSelection. L'application va immédiatement tomber en panne et l'erreur spécifique avec ce jouet exemple est "Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)". Toute idée est la bienvenue!
En aparté, j'ai regardé ces questions: (SwiftUI hiérarchique Sélecteur avec des données dynamiques se bloque) et (swiftUi : 2 préparateurs de sur un écran de l'application crash avec "Index out of range"), mais si possible, j'aimerais éviter de convertir ma chaîne de sélection de variables (pickerOneSelection, pickerThreeSelection) en nombres entiers, qui doit ensuite être traduit dans des chaînes pour obtenir le texte associé à la sélection de l'utilisateur. Si il n'est pas possible de faire ce que j'essaie de faire sans les variables de l'indice, si vous pouviez m'aider à comprendre pourquoi, ce serait très utile.
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
Merci beaucoup pour votre aide et votre expertise!