【发布时间】:2018-11-13 02:48:38
【问题描述】:
首先我看到了答案: here 但对我来说,来自 android 和 angular 的我不得不写这么多代码(在 android 和 angular 中需要一行)加上答案不是最新的,所以想知道现在是否有更好的方法
为了澄清,这里是我的例子:
struct User{
let fistName:String
let lastName:String
}
我用 :
检索数据Firestoer.firestore().collection("users").document('someId').getDocument{
(snapshot,error) in
}
问题是如何通过一行代码将快照值分配给用户对象值 - 类似于 user = snapshot -ish 。
【问题讨论】:
-
文档中已经很好地说明了答案。在自定义对象部分查看Get data with Cloud Firestore。有一个读取 Cities 节点并将每个城市作为 City 对象返回的示例。与您对 User 对象所做的非常相似。
-
@Jay yeap 我看过了,我不能让它工作,它说:“返回城市(字典:数据)” - 我的对象是简单的“stuct”,我无法制作“ (字典:数据)”——调用。所以我回到 firestore 文档,看看他们是如何设置自定义对象的,但那里(在 addData/custom 对象下)说:“/这在 Swift 中不受支持。请改用值类型。”当他们说“价值”时,我理解它,因为我应该为对象中的每个变量调用“document.get(“firstName”) as String”——也许我理解不正确..?
-
我认为您忽略了在添加数据中,您定义了一个用于定义每个城市的 City 类。您可以将文档转回 City 对象:。 City(dictionary: 是 city 类的初始化器,它获取传递的字典中的 key: 值对并将它们分配给 City 属性。您可以对 User 做同样的事情,或者简单地 let aUser = User(firstName : fName, lastName: lName) 其中 fName 和 lName 是返回的快照中的值。
-
但要传递 fName 和 lName,我需要从快照中为每个变量“提取”这些值,无论如何,使用 fName=snapshot.get("firstName") 之类的东西。正确的? - 或者我是否误解了你并且此刻变得越来越愚蠢?:S
-
这不是这个过程的真正运作方式,它不是迭代;它将快照传递给类以使用快照中的数据填充变量。如果您通过 .value 观察实例化多个用户对象,并且该过程需要在任何平台上发生,您只需要迭代(想想:循环)。 User 类/结构仍然需要定义属性,并且您需要知道正在读取的 firebase 节点的结构。它可以是键:单个字符串的值对,也可以是键:快照对或许多其他结构。
标签: swift firebase google-cloud-firestore