我应该如何从 firebase 检索数据并将其放入字典中?
How should I retrieve data from firebase and put it into a dictionary?
我有一个组织文档,里面有一个成员集合,然后里面有一个成员文档。在成员文档中包含作为成员的用户的地图。键是用户 ID 和 3 个值(名字、姓氏、用户名)。我正在尝试将此数据加载到我的 "Event" class 中,它包含一个 membersInvited 属性 这是一个字典。在事件 class 中有一个获取此数据的方法,称为 getOrgMembers()。即使我在 firebase 中有这些数据,我的字典也得到了一个 nil 值。我也在使用 Dispatch,但有点陌生。
下面是事件中的代码Class:
var membersInvited: [Member: Bool]?
func getOrgMembers(dispatch: DispatchGroup?) {
let membRef = BandzDatabase.collection("Organizations").document(currentUser.currentOrgID!).collection("Members").document("members")
membRef.getDocument { (snapshot, error) in
if let error = error {
print (error.localizedDescription)
} else {
if let data = snapshot?.data() {
for (key,value) in data {
if let membArray = value as? [String: Any] {
let username = membArray["username"] as? String
let firstName = membArray["firstName"] as? String
let lastName = membArray["lastName"] as? String
let userID = key
let member = Member(username: username ?? "", firstName: firstName ?? "", lastName: lastName ?? "", userID: userID)
self.membersInvited?.updateValue(true, forKey: member)
}
}
}
}
dispatch?.leave()
}
}
struct Member: Hashable {
var username: String
var firstName: String
var lastName: String
var userID: String
init (username: String, firstName: String, lastName: String, userID: String) {
self.username = username
self.firstName = firstName
self.lastName = lastName
self.userID = userID
}
}
下面是我从另一个 class:
调用这个方法
func getMembers() {
showActivityIndicatory(uiView: self.view)
self.dispatchGroup.enter()
eventMade?.getOrgMembers(dispatch: self.dispatchGroup)
self.dispatchGroup.notify(queue: .main) {
//self.tableView.reloadData()
stopActivityIndicator()
print("happens")
print(self.eventMade?.membersInvited)
}
}
经过一些研究,我发现由于我从未初始化过字典,所以每当我调用追加 key-value 对时它甚至不会 运行 因为它是可选的。所以我将 decleration 更改为:
var membersInvited: [Member: Bool] = [:]
我有一个组织文档,里面有一个成员集合,然后里面有一个成员文档。在成员文档中包含作为成员的用户的地图。键是用户 ID 和 3 个值(名字、姓氏、用户名)。我正在尝试将此数据加载到我的 "Event" class 中,它包含一个 membersInvited 属性 这是一个字典。在事件 class 中有一个获取此数据的方法,称为 getOrgMembers()。即使我在 firebase 中有这些数据,我的字典也得到了一个 nil 值。我也在使用 Dispatch,但有点陌生。
下面是事件中的代码Class:
var membersInvited: [Member: Bool]?
func getOrgMembers(dispatch: DispatchGroup?) {
let membRef = BandzDatabase.collection("Organizations").document(currentUser.currentOrgID!).collection("Members").document("members")
membRef.getDocument { (snapshot, error) in
if let error = error {
print (error.localizedDescription)
} else {
if let data = snapshot?.data() {
for (key,value) in data {
if let membArray = value as? [String: Any] {
let username = membArray["username"] as? String
let firstName = membArray["firstName"] as? String
let lastName = membArray["lastName"] as? String
let userID = key
let member = Member(username: username ?? "", firstName: firstName ?? "", lastName: lastName ?? "", userID: userID)
self.membersInvited?.updateValue(true, forKey: member)
}
}
}
}
dispatch?.leave()
}
}
struct Member: Hashable {
var username: String
var firstName: String
var lastName: String
var userID: String
init (username: String, firstName: String, lastName: String, userID: String) {
self.username = username
self.firstName = firstName
self.lastName = lastName
self.userID = userID
}
}
下面是我从另一个 class:
调用这个方法func getMembers() {
showActivityIndicatory(uiView: self.view)
self.dispatchGroup.enter()
eventMade?.getOrgMembers(dispatch: self.dispatchGroup)
self.dispatchGroup.notify(queue: .main) {
//self.tableView.reloadData()
stopActivityIndicator()
print("happens")
print(self.eventMade?.membersInvited)
}
}
经过一些研究,我发现由于我从未初始化过字典,所以每当我调用追加 key-value 对时它甚至不会 运行 因为它是可选的。所以我将 decleration 更改为:
var membersInvited: [Member: Bool] = [:]