You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

之前尝试失败的原因

  1. 强制转换FieldValue.serverTimestamp()为Timestamp是错误的:FieldValue.serverTimestamp()是一个标记值,作用是告诉Firestore服务器在写入时自动替换为当前时间戳,它本身并不是Timestamp类型,无法直接转换。
  2. 把FieldValue.serverTimestamp()作为字典的键完全错误:Firestore文档的键必须是字符串类型,不能用FieldValue类型,这就导致了invalidValue错误。

和Android写法的区别

Android的set()方法可以直接接收键值对结构的参数,而Swift中setData(from:)和setData(_:)是两个不同的API:

  • setData(from:):传入符合Codable协议的自定义对象,自动序列化为Firestore文档。
  • setData(_:):直接传入[String: Any]字典,手动定义文档的键值对。

内容的提问来源于stack exchange,提问作者Dylon Jaynes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:45:33