Swift不从Firestore提取数据

问题描述

我在Firestore中有一堆这种格式的对象。当我没有将数组包含在对象中时,它工作得很好,但现在似乎根本没有加载。

这是数据库:

:

这里是对象:

struct BuildingNew: Identifiable,Hashable,Equatable{
    var id : String = UUID().uuidString
    var ml : String
    var name : String
    var address : String
    var description : String
    var phone : String
    var website : String
    var imageURL: String
    var historicalRelevance : String
    var images : [String]
    var tags : [String]
}

最后,这是视图模型:

class BuildingViewModelNew: ObservableObject {
    
    @Published var buildings = [BuildingNew]()
    
    private var db = Firestore.firestore()
    
    func fetchData(){
        db.collection("buildings_new").addSnapshotListener{ (querySnapshot,error) in
            guard let documents = querySnapshot?.documents else {
                print ("No buildings found")
                return
            }
            self.buildings = documents.map { (queryDocumentSnapshot) -> BuildingNew in
                let data = queryDocumentSnapshot.data()
                 
                let ml = data["ID"] as? String ?? ""
                let name = data["Name"] as? String ?? ""
                let address = data["Address"] as? String ?? ""
                let description = data["Description"] as? String ?? ""
                let phone = data["Phone"] as? String ?? ""
                let website = data["Website"] as? String ?? ""
                let imageURL = data["current_image"] as? String ?? ""
                let historicalRelevance = data["historicalRelevance"] as? String ?? ""
                let images = data["images"] as? [String] ?? [""]
                let tags = data["tags"] as? [String] ?? [""]

                return BuildingNew(ml: ml,name: name,address: address,description: description,phone: phone,website: website,imageURL: imageURL,historicalRelevance: historicalRelevance,images: images,tags: tags)
        }
    }
}
}

它正在使用.OnAppear函数在SwiftUI中获取数据,但是自从添加数组以来,它一直没有用。我尝试使用 Array 而不是[String] ,但是没有运气。

解决方法

不是因为数组,而是因为您的字段名称不匹配。在您的代码中,某些字段名称是大写的:

let ml = data["ID"] as? String ?? ""
let name = data["Name"] as? String ?? ""
...

但是,在您的数据库中,它们是小写的:

id:   "MLid"
name: "daves diner"

因此,将以下内容更改为小写:

let ml = data["id"] as? String ?? ""
let name = data["name"] as? String ?? ""
let address = data["address"] as? String ?? ""
let description = data["description"] as? String ?? ""
let phone = data["phone"] as? String ?? ""
let website = data["website"] as? String ?? ""

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...