google-cloud-firestore - SwiftUI 和 Picker 和 FireStore 返回文档 ID 不落
问题描述
我有两个 DisclosureGroup,每个都有一个选择器。第一个选择器只是从一个静态的年份数组中读取,并且可以正常工作。第二个选择器填充用户名的选择器,但当您选择用户时,该值是 Firebase 文档 ID,而不是全名值。
// 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)
解决方案
如果你真的想selectedDriver
成为这个名字,你可以改变你ForEach
的基础fullname
而不是id
:
ForEach(userListVM.userVM, id: \.fullname) {
然而,如果你曾经有过两个司机同名的情况,这会产生有趣的结果。
也许更好的选择是从选定的 ID 导出模型:
在onChange
:
print("SELECTED DRIVER ID: \(selectedDriver)")
let selectedDriverModel = userListVM.userVM.first { $0.id == selectedDriver }
print("Selected driver name: \(selectedDriverModel?.fullname ?? "")")
推荐阅读
- c# - 混合使用 DateTime 和 DBNull 值时的 OrderBy 会引发错误
- r - 无法正确分组和求和
- javascript - 正则表达式:无效的组说明符名称 - 反应原生
- docker - 使用相同的 Docker 镜像文件权限因机器而异
- python - 如何将 dict 打印为正确的格式?
- javascript - 打字稿:按接口或类过滤对象
- javascript - 如何使用猫鼬查询嵌套对象内的数组?
- mysql - 如何在 Rails 中重试整个 activerecord 事务?
- python - 如何将日期时间值更改为单独格式化的值
- objective-c - Objective C 中 NSFilemanager 的问题