Swift中如何在Firestore的document().setData()中使用FieldValue.serverTimestamp()
解决Swift Firestore设置服务器时间戳的错误问题
问题根源
你用错了Firestore的写入方法:setData(from:) 是专门用于Codable对象序列化的API,不能直接传入[String: Any]类型的字典,这就是导致Type of expression is ambiguous without more context错误的核心原因。
正确写法
改用不带from参数的setData(_:)方法,直接传入键值对字典即可:
for document in snapshot!.documents { do { try document.reference.collection("Data").document() .setData([ "first": FieldValue.serverTimestamp(), "second": dataStringArray ]) print("Data successfully written to firestore.") } catch let error { print("Error writing data to firestore: \(error)") } }
之前尝试失败的原因
- 强制转换
FieldValue.serverTimestamp()为Timestamp是错误的:FieldValue.serverTimestamp()是一个标记值,作用是告诉Firestore服务器在写入时自动替换为当前时间戳,它本身并不是Timestamp类型,无法直接转换。 - 把
FieldValue.serverTimestamp()作为字典的键完全错误:Firestore文档的键必须是字符串类型,不能用FieldValue类型,这就导致了invalidValue错误。
和Android写法的区别
Android的set()方法可以直接接收键值对结构的参数,而Swift中setData(from:)和setData(_:)是两个不同的API:
setData(from:):传入符合Codable协议的自定义对象,自动序列化为Firestore文档。setData(_:):直接传入[String: Any]字典,手动定义文档的键值对。
内容的提问来源于stack exchange,提问作者Dylon Jaynes
相关产品推荐
相关产品推荐

