SwiftUI 和 Picker 和 FireStore 返回文档 ID 不下降
Posted
技术标签:
【中文标题】SwiftUI 和 Picker 和 FireStore 返回文档 ID 不下降【英文标题】:SwiftUI and Picker and FireStore return doc ID not fall 【发布时间】:2021-02-27 17:34:23 【问题描述】:我有两个 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)
【问题讨论】:
【参考方案1】:如果您真的希望 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 ?? "")")
【讨论】:
我知道它不受欢迎,但感谢您的建议。以上是关于SwiftUI 和 Picker 和 FireStore 返回文档 ID 不下降的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:使用 Picker(分段)更改 ForEach 源或获取请求