#google-cloud-firestore #swiftui #swiftui-picker
#google-облако-firestore #swiftui #swiftui-средство выбора
Вопрос:
У меня есть две группы раскрытия с сборщиком в каждой. Первый сборщик просто считывает данные из статического массива лет и работает без проблем. Второй сборщик, который заполняет сборщик именами пользователей, но когда вы выбираете пользователя, значением является идентификатор документа Firebase, а не значение fullname.
// MARK: - DISCLOSER GROUP TRIP YEAR
DisclosureGroup("Trip Year: (String(selectedYear))", isExpanded: $tripYearIsExpanded) {
Picker(selection: $selectedYear, label: Text("")) {
ForEach(years, id: .self) {
Text(String($0))
} // END:FOREACH
} // END:PICKER
.onChange(of: selectedYear, perform: { value in
getTrips(passedYear: selectedYear)
})
} // END:DISCLOSUREGROUP
.padding(.horizontal)
// MARK: - DISCLOSURE GROUP DRIVER
DisclosureGroup("Driver: (selectedDriver)", isExpanded: $driverIsExpanded) {
Picker(selection: $selectedDriver, label: Text("")) {
ForEach(userListVM.userVM, id: .id) { user in
Text(user.fullname)
} // END:FOREACH
} // END:PICKER
.onChange(of: selectedDriver, perform: { value in
print("SELECTED DRIVER: (selectedDriver)")
})
}
.padding(.horizontal)
Ответ №1:
Если бы вы действительно хотели selectedDriver
быть именем, вы могли бы изменить свое ForEach
на «основываться на fullname
«, а не id
:
ForEach(userListVM.userVM, id: .fullname) {
Однако, если у вас когда-либо был случай, когда у двух драйверов было одно и то же имя, это привело бы к забавным результатам.
Возможно, лучшим вариантом было бы получение модели обратно из выбранного идентификатора:
в onChange
:
print("SELECTED DRIVER ID: (selectedDriver)")
let selectedDriverModel = userListVM.userVM.first { $0.id == selectedDriver }
print("Selected driver name: (selectedDriverModel?.fullname ?? "")")
Комментарии:
1. Я знаю, что это не одобряется, но спасибо за предложение.