firebase快照值到字典

时间:2017-07-31 03:21:42

标签: swift firebase-realtime-database

在我的应用程序中,有一个名为room的数据对象,它包含以下属性......

class Room: NSObject {

    var rid: String?
    var owner: String?
    var groupChatName: String?
    var groupChatDescription: String?
    var members: AnyObject?

}

这是相应的JSON

"A632CA68-40D9-4F3A-B8C8-245457057443" : {
  "groupChatDescription" : "Test Description",
  "groupChatName" : "Test Name",
  "members" : {
    "WuqCAt4mM3h0P0X1m7hVZ7NQyLC2" : {
      "username" : "Steve"
    }
  },
  "owner" : "Steve"
},

当我从数据库中检索这些值时,我将它们放在字典中

func fetchAllRooms(){
    Database.database().reference().child("rooms").observe(.childAdded, with: {(snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {
            let room = Room()

            room.rid = snapshot.key
            room.setValuesForKeys(dictionary)

            self.rooms.append(room)

            print("\(room.members)")

            DispatchQueue.main.async(execute: {
                self.collectionView?.reloadData()
            })
        }

        print("end of room snap")

    }, withCancel: nil)

}

数据正确匹配,但是处理成员比我原先预期的要困难得多。

print("\(room.members)")返回

Optional({
    WuqCAt4mM3h0P0X1m7hVZ7NQyLC2 =     {
        username = "Steve";
    };
})

这是很多无关的文字。特别是考虑到这只是一个成员,我需要在app中返回一个成员列表。

我认为最适合我的情况是为当前字典中的成员创建字典。考虑每个成员都会有其他属性,例如对他们的个人资料图片的引用。

所以我可以调用类似print("\(room.members.usernames)")的内容并获取所有用户名,并且以后仍然可以使用其他属性。

但我不知道这是最好的解决方案,还是从哪里开始。我希望FireBase有一些内置的方法来处理这个问题,但到目前为止我还没有找到任何东西。

非常感谢任何答案,建议和/或参考。

0 个答案:

没有答案