我在访问我的startDate时遇到问题:日期数据,一旦我有它从Firestore数据库。存储在FireStore中的数据:
struct dateSetting: Identifiable, Equatable, Codable, Hashable {
var id = UUID()
var startDate: Date
}
如何获取数据:
func fetchPosts() async throws -> [dateSetting] {
guard let uid = Auth.auth().currentUser?.uid else { return [] }
let snapshot = try await startDateReference1.document(uid).collection("startDate")
.order(by: "startDate", descending: true)
.getDocuments()
return snapshot.documents.compactMap { document in
try! document.data(as: dateSetting.self)
}
}
视图模型”
@Published var startDateData: Loadable<[dateSetting]> = .loading
...
func fetchDatePosts() {
Task {
do {
startDateData = .loaded( try await startDateRepository.fetchPosts())
print(startDate)
} catch {
print("[TravelStartDateViewModel] Cannot fetch posts: \(error)")
}
}
}
这将打印:loaded([Days_Checker.dateSetting(id:99 F73 F53-C527- 4D 8 E-8D 2A-F3 D227 CE 1F 5E,开始日期:2023-05-04 13:30:00 +0000)])
我可以在视图中以列表的形式访问数据:浏览次数:
List(viewModel.startDateData) { date in
DateRowsView(startDate: date)
行视图:
struct DateRowsView: View {
let startDate: dateSetting
var body: some View {
VStack(alignment: .leading) {
Text(dateFormatter.string(from: startDate.startDate))
但是,我无法访问startDateData来撤回startDate并将其放入一个新变量中,以便我可以对其进行计算。
我使用以下代码来访问一个单独的Type变量:
func fetchTheTypePosts() {
Task {
do {
let fetchedType = try await typeRepository.fetchPosts()
theType = calculateType(ty: fetchedType)
print("theType: " + theType)
} catch {
print("[TravelTypeViewModel] Cannot fetch posts: \(error)")
type = .error(error)
}
}
}
func calculateType(ty: [typeSetting]) -> String {
let totalType = ty.reduce("") { $0 + $1.type }
return totalType
}
但我正在努力寻找一种方法来提取日期:loaded([Days_Checker.dateSetting(id:99 F73 F53-C527- 4D 8 E-8D 2A-F3 D227 CE 1F 5E,开始日期:2023-05-04 13:30:00 +0000)])我尝试将其添加到var theStartDate的任何转换:日期给予……错误:无法将类型“[dateSetting]”的返回表达式转换为返回类型“Date”
请帮助或要求我澄清任何事情。谢谢
在dateSetting上使用reduce和filter失败。
1条答案
按热度按时间qnakjoqk1#
fetchPosts
方法返回dateSetting
对象的 * 数组 *。要从其中一个元素中获取startDate
,您必须选择其中一个元素。例如