【问题标题】:How should I retrieve data from firebase and put it into a dictionary?我应该如何从 firebase 检索数据并将其放入字典中?
【发布时间】:2019-07-15 01:41:41
【问题描述】:

我有一个组织文档,其中包含一个成员集合,然后是一个成员文档。在成员文档中包括一个用户的地图,该用户是一个成员。 Key 是 UserID 和 3 个值(firstName、lastName、username)。我正在尝试将此数据加载到我的“事件”类中,该类包含一个作为字典的 membersInvited 属性。 Event 类内部有一个获取此数据的方法,称为 getOrgMembers()。即使我在 firebase 中有这些数据,我的字典也得到了 nil 值。我也在使用 Dispatch,但对它有点陌生。

以下是事件类中的代码:

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
    }

}

下面是我从另一个类调用这个方法:

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

【问题讨论】:

  • 使用你的调试器。跟踪代码。看看它在哪里没有达到你的预期。您没有告诉我们您发布的代码在运行时的实际作用,因此很难为您提供帮助。
  • 它返回 nil 就像我在问题中所说的那样

标签: swift firebase dictionary dispatch


【解决方案1】:

经过一番研究,我发现由于我从未初始化字典,因此每当我调用附加键值对时,它甚至都不会运行,因为它是可选的。所以我把声明改成了这样:

var membersInvited: [Member: Bool] = [:]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2020-05-08
    相关资源
    最近更新 更多