如何在Swift中检查Firebase Firestore指定文档中是否存在某字段
检查Firebase Firestore文档中是否存在指定字段(Swift实现)
可以通过文档快照(DocumentSnapshot)来实现字段存在性检查,以下是两种常见场景的实现代码:
单次获取文档并检查字段
适用于只需要一次性验证字段是否存在的场景:
import FirebaseFirestore // 替换为你的集合名称和文档ID let targetDocRef = Firestore.firestore().collection("your-collection").document("target-document-id") targetDocRef.getDocument { snapshot, error in guard let snapshot = snapshot, snapshot.exists else { print("目标文档不存在或获取失败") return } // 方式1:检查数据字典的键集合 if snapshot.data()?.keys.contains("your-target-field") == true { print("指定字段存在") } else { print("指定字段不存在") } // 方式2:直接尝试获取字段值 if snapshot.get("your-target-field") != nil { print("指定字段存在") } else { print("指定字段不存在") } }
实时监听字段存在性变化
如果需要实时监测字段是否被添加/移除,可以使用快照监听器:
import FirebaseFirestore let targetDocRef = Firestore.firestore().collection("your-collection").document("target-document-id") // 添加实时监听器 let listener = targetDocRef.addSnapshotListener { snapshot, error in guard let snapshot = snapshot, snapshot.exists else { print("目标文档不存在或监听失败") return } if snapshot.data()?.keys.contains("your-target-field") == true { print("指定字段存在(实时更新)") } else { print("指定字段不存在(实时更新)") } } // 不再需要监听时,记得移除监听器 // listener.remove()
注意事项
- 必须先判断
snapshot.exists,避免因文档不存在而误判字段不存在 - 如果需要区分「字段存在但值为Firestore空值(NSNull)」和「字段不存在」,建议使用
data()?.keys.contains()的方式:if let docData = snapshot.data() { if docData.keys.contains("your-target-field") { let fieldValue = docData["your-target-field"] if fieldValue is NSNull { print("字段存在,但值为空") } else { print("字段存在,值为:\(fieldValue!)") } } else { print("字段不存在") } }
内容的提问来源于stack exchange,提问作者user19534819
相关产品推荐
相关产品推荐

