从Firebase获取信息:Swift

时间:2017-11-05 20:35:36

标签: swift

我从Firebase查询分支,以便将以下内容打印到控制台:

{
    2345 = 1;
    6244 = 1;
    q6x8 = 1;
}

我正在尝试在左边创建一个值数组;即,一个看起来像这样的数组:[2345,6244,q6x8]。

因为打印到控制台的数据结构使用等号而不是冒号,所以它不是字典,也不是哈希映射。因此,当我尝试做

print(snap.value![0])

print(snap.value!.first)

我收到错误提示“输入'任何'没有下标成员”或“输入'任何'没有成员'先'。”

我被困住了。任何帮助将不胜感激,提前谢谢。

2 个答案:

答案 0 :(得分:0)

snap.value [0]不起作用,因为返回的数据是DataSnapshot类型。此外,Firebase使用键值对。因此,您的数据必须类似于:2345 = 1 : true

guard let snap = snap.children.allObjects as? [DataSnapshot] else {return}

for (key, val) in snap {
   print(key, val)
}

答案因Firebase数据结构而异。在您的情况下,snap2345 = 1 : true

答案 1 :(得分:0)

阿琼,

我正在访问firebase上的数据集,我的代码看起来像这样。

typealias JSONObject = [String: Any]


Auth.auth().signIn(withEmail: "blah.blah@gmail.com", password: "blahblah", completion: { (user, error) in
        if error == nil {
            self.loadconfig(login: "blahblah", passwd:  "blahblah", rulelist: "blah")
        }
    })

..
..
..

 func loadconfig(login: String, passwd: String, rulelist:String) {

 let rootRef = Database.database().reference().child(rulelist)
 var jsonObjects:[JSONObject] = []
 rootRef.observe(.value, with: { snapshot in
        if let _ = snapshot.value as? [JSONObject] {
            jsonObjects = (snapshot.value as? [JSONObject])!
            do {
                self.products = try jsonObjects.map(decode)
            } catch {
                print("failed")
            }
        }
 }

我的数据看起来像这样......

{
"blah" : [ {
"X" : 1,
"Y" : 1,
"Z" : "true",
"A" : 1,
"B" : "https:",
}, {
"X" : "Rule 0",
"Y" : "Go Market after GrandHall",
"Z" : "00:01",
"A" : "true"
} ]
}

如果这不能帮助您尝试更新问题,并在问题中包含数据集的导出。