微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我试图将自定义数据保存到swiftUI中的云Firestore中,我试图构建从快照侦听器获取的数据

如何解决我试图将自定义数据保存到swiftUI中的云Firestore中,我试图构建从快照侦听器获取的数据

调用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")
                }
            }
        }
    }

这是我在获取数据集后试图构造数据的功能

  mystr='hello world'
    
  count= sum(1 if c.lower() in 'aeIoU' else 0 for c in mystr) 

   #output:3

解决方法

无需为您的数据结构创建类。一个类: ObservableObject 根据数据结构接受,处理并将所需的数据(值)传递(传递)到视图中... 好消息:Firebase支持Swift Codable协议–选中此link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。