当指定路径有对象时,Firestore 返回空数组

问题描述 投票:0回答:1
//
//  ListView.swift
//  ToDoList
//
//  Created by Garrett Post on 12/23/23.
//

import SwiftUI
import FirebaseFirestoreSwift
struct ListView: View {
    @StateObject var viewModel = ListVM()
    @FirestoreQuery var items: [Item]
    
    init(userId: String) {
        self._items = FirestoreQuery(collectionPath: "/users/\(userId)/items")
        print(items)
    }
    
    var body: some View {
        NavigationStack {
            ZStack {
                Colors.PRIMARY
                    .ignoresSafeArea()
                VStack {
                    HStack {
                        Text("Title")
                            .padding()
                            .foregroundStyle(Colors.WHITE)
                            .font(.title)
                        Spacer()
                        Button {
                            viewModel.showingNewItemView = true
                        } label: {
                            Label("", systemImage: "plus")
                                .padding()
                                .foregroundStyle(Colors.WHITE)
                                .controlSize(.extraLarge)
                        }
                    }
                    Spacer()
                    List(items) { item in
                        Text(item.title)
                    }
                }
            }
            .sheet(isPresented: $viewModel.showingNewItemView, content: {
                NewItemView(showingNewItemView: $viewModel.showingNewItemView)
            })
        }
    }
}

#Preview {
    ListView(userId: "OWD1UmcgSqMDLHwZIlqlVrxoYsn1")
}

What I see in the database. Inside the items collection.

我期望 Firebase 返回 Item 对象,我知道它有一个 title 属性。我还知道 items 集合包含 Item 对象。我对使用 Firebase 还很陌生,但我假设由于身份验证功能有效,问题一定出在这个文件中。

我没有尝试过很多,因为我不知道问题是什么。 init 中的 print 语句打印一个空数组。

swift firebase google-cloud-firestore swiftui swift3
1个回答
0
投票

FirestoreQuery
没有最简单形式的错误处理

@FirestoreQuery var items: [Item]

你可以使用

@FirestoreQuery var result: Result<[Item], Error>

你的

body
需要一个
switch

var body: some View {
    switch result {
    case .success(let items):
        Text(items.count, format: .number)
    case .failure(let error):
        Text(error.localizedDescription)
            .task {
                print(error)
            }
    }
}

经常有一些元素缺少未标记为

Optional
的字段,这将帮助您获得更好的错误。

© www.soinside.com 2019 - 2024. All rights reserved.