ios - 无需字段名称即可获取文档字段的所有值
问题描述
迅速我有以下数组:
var postalCode = [String]()
在 Firestore 中,我将来会有很多文档,每个文档中有很多字段,其中包括邮政编码。像这样的东西:
现在,无论字段名称如何,如何获取我的集合(集合称为 deliveryPostalCodes)中所有文档的值?因为将来我将不得不在这里添加许多字段,我可以估计我将创建多少个文档和字段以及它们的名称。因此,我只想获取在此示例中类似于的值并将其M8V
存储在我的变量var postalCode = [String]()
中。我有以下代码;但在这我必须说出应该是什么字段名(code1):
db.collection(DatabaseRef.deliveryPostalCodes).getDocuments { (snap, error) in
if let error = error{
debugPrint(error.localizedDescription)
return
}
snap?.documents.forEach({ (doc) in
let code1 = doc[DatabaseRef.code1] as? String ?? ""
})
}
如果不调用字段名称,我怎么能做到这一点?
解决方案
您可以通过调用其DocumentSnapshot.data()
方法来获取文档中的所有字段,该方法返回一个[String: Any]
. 之后,您可以从地图中获取值(删除键),然后过滤结果数组以删除空值。
它看起来像这样:
snap?.documents.forEach({ (doc) in
let data = doc.data()
let nonEmptyValues = (Array(data.values) as! [String]).filter { !$0.isEmpty }
...
})
我总是发现在在线游乐场(例如http://online.swiftplayground.run/ )中测试这种类型的东西是最容易的。我对此答案的测试台:
import Foundation
let data:[String:Any] = ["key1": "value1", "key2": "42", "key3": "", "key4": "value4"]
print(data)
print(data.values)
print((Array(data.values) as! [String]).filter { !$0.isEmpty })
哪个打印:
[“key3”:“”,“key2”:“42”,“key1”:“value1”,“key4”:“value4”]
["", "42", "value1", "value4"]
["42", "value1", "value4"]
推荐阅读
- java - 复合模型中的火属性变化
- bash - bash 脚本在通过 systemd 运行时出现备份故障
- python - 无法使用 '.read()' 函数读取文件,出现错误
- postgresql - 具有字符串比较的连接表的性能
- javascript - 在深层嵌套对象中按特定键查找值
- android - 任务:app:compileDebugJavaWithJavac错误
- java - 如何从改造android java上传文件
- c - 每次使用以下功能时都会出现无法读取内存错误,
- node.js - FireStore 不适用于云功能
- python-3.x - Tkinter Python 类和变量