Я начинающий разработчик SwiftUI, и у меня возникли проблемы с созданием представления, которое динамически отображает различные средства выбора на основе предыдущего выбора пользователя в этом представлении. Чтобы увидеть проблему, запустите следующий код в симуляторе, измените выбор выбора на "Выбор три", затем измените его ОБРАТНО на "Выбор два" и попытайтесь изменить выбор выбора. Приложение немедленно завершит работу; конкретная ошибка в этом примере игрушки - "Поток 1: EXC_BAD_ACCESS (код=1, адрес=0x8)". Любое понимание очень приветствуется!
Как в стороне, я бы посмотрел на следующие вопросы: (SwiftUI иерархического выбора с динамическими данными сбои) и (swiftUi : 2 комплектовщики на одном экране - приложение аварии с "индекс вне диапазона"), но если возможно, я хотел бы избежать преобразования моей строки выбора переменных (pickerOneSelection, pickerThreeSelection) в целые числа, которые затем должны быть переведены обратно в строки, чтобы получить текст, связанный с выбора пользователя. Если невозможно сделать то, что я пытаюсь сделать, без переменных индекса, если бы вы могли помочь мне понять, почему, это было бы очень полезно.
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
Большое спасибо за вашу помощь и опыт!