如何使用Swift将自定义结构体上传存储至Firestore?
回答
完全可以将你定义的Piece自定义结构体保存到Firestore,你当前结构体的字段类型全部在Firestore原生支持的数据类型范围内,不需要做特殊的格式兼容处理。
实现注意事项
- 先修正你示例代码里的类型不匹配问题:你描述中
name是字符串类型,但示例里给name赋值为数字2222,强类型语言下这会触发序列化错误,要么把name字段类型改为数值类型,要么给它传字符串值。 - 给结构体添加对应平台Firestore SDK要求的序列化标记,让SDK能自动完成结构体和Firestore文档格式的双向转换:
- Swift平台给结构体遵循
Codable协议 - Android/Kotlin平台将结构体定义为带序列化注解的
data class - Web/TS平台可以直接传普通对象,或者给类配置Firestore自定义转换器
- Swift平台给结构体遵循
- 你定义的
quantities字段是字符串到数字的映射结构,和Firestore原生的Map类型完全对应,不需要额外拆分转换,存入后会自动在文档下生成嵌套的键值对结构,还支持单独查询、更新Map内的单个键值。
参考代码(以Swift为例,其他平台逻辑一致)
import FirebaseFirestoreSwift struct Piece: Codable { // 可选:绑定Firestore自动生成的文档ID @DocumentID var id: String? var name: String var location: String var quantities: [String: Int] } // 上传示例 func uploadPiece(piece: Piece) async throws { let db = Firestore.firestore() // 直接传入结构体即可,SDK自动完成序列化 try db.collection("pieces").addDocument(from: piece) }
序列化配置完成后,不管是写入还是读取数据,都不需要手动把结构体拆成字典逐字段赋值,SDK会自动完成全字段的映射,读数据时也可以直接把文档快照解码为Piece实例使用。
内容的提问来源于stack exchange,提问作者Diego Menegatti
相关产品推荐
相关产品推荐

