首页 > 解决方案 > 我试图在 swiftUI 中将自定义数据保存到云 Firestore,我试图构建从快照侦听器获得的数据

问题描述

调用document.data(as: )需要Decodable协议,它将数据保存得很好,因为调用addDocument(from:)需要可编码对象,所以我传递了我的自定义类对象,但我不知道为什么反过来需要协议。
我如何通过协议?

这是我的自定义类定义:

class PersonalInfo: Codable, ObservableObject {
    @Published var name: String
    @Published var age: Int
    @Published var Sex: String
    
    enum CodingKeys: CodingKey{
        case name, age, Sex
    }
    init(name: String, age:Int, Sex:String) {
        self.name = name
        self.age = age
        self.Sex = Sex
    }
    public required init(from decoder: Decoder) throws {
       
        let container = try decoder.container(keyedBy: CodingKeys.self)
        name = try container.decode(String.self, forKey: .name)
        age = try container.decode(Int.self, forKey: .age)
        Sex = try container.decode(String.self, forKey: .Sex)
    }
    public func encode( to encoder: Encoder) throws{
        var container = try encoder.container(keyedBy: CodingKeys.self)
        try container.encode(name, forKey: .name)
        try container.encode(age, forKey: .age)
        try container.encode(Sex, forKey: .Sex)
    }     
}

这是我在获取数据集后尝试构建数据的函数:

mutating func loadData(){
        let listener = query?.addSnapshotListener{ (snapShot, error ) in
            guard let snapshot = snapShot else {
                print("Error listening")
                return
            }
            let userCollection = try? snapshot.documents.map{ document -> PersonalInfo in
                let decoder = JSONDecoder()
                if let user = try document.data(as: PersonalInfo(from: decoder)){
                    return user
                }
                else{
                    fatalError("unable to initialize type")
                }
            }
        }
    }

标签: swiftswiftuicodable

解决方案


无需为您的数据结构创建类。一个类:ObservableObject根据您的数据结构接受、处理和传递(发布)所需的数据(值)到您的视图......好消息:Firebase 支持 Swift Codable 协议 – 检查此链接


推荐阅读