swift 访问日期Firestore数据的问题

odopli94  于 2023-05-16  发布在  Swift
关注(0)|答案(1)|浏览(80)

我在访问我的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失败。

qnakjoqk

qnakjoqk1#

fetchPosts方法返回dateSetting对象的 * 数组 *。要从其中一个元素中获取startDate,您必须选择其中一个元素。例如

if let date = try await fetchPosts()?.first
{
   print(date.startDate)
}

相关问题