swift - 我试图在 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")
}
}
}
}
解决方案
无需为您的数据结构创建类。一个类:ObservableObject根据您的数据结构接受、处理和传递(发布)所需的数据(值)到您的视图......好消息:Firebase 支持 Swift Codable 协议 – 检查此链接
推荐阅读
- prolog - 如何在 Prolog 中解析文本的第一部分?
- json - json 加载 JSONDecodeError: Expecting ',' 分隔符
- angular - 仅在 IE (Internet Explorer) 中重定向到另一个 URL
- python - 使用负索引调整大小的列表切片分配
- java - 为什么java不支持直接将操作数放入局部变量表的字节码?
- javascript - 重新加载页面时保留选定的选项值
- java - Android InApp 订阅架构
- go - Golang RestApi Mysql 插入查询
- django - 使用 Django 的电子商务网站导航栏
- javascript - 在 JavaScript Canvas 中,如何在使用函数移动画布后将其保留在画布中?