【问题标题】:Iterating Through Firebase Array遍历 Firebase 数组
【发布时间】:2018-02-26 10:39:11
【问题描述】:

当我得到数据库的快照时,我看到了这个:

{
    "9-17-2017" =     {
        "19:26:38" =         {
            1abA = 1ab;
            1abrA = 1;
            2abA = 2ab;
            2abrA = 2;
            3abA = 3ab;
            4abA = 4ab;
            5abA = 5a;
            6abA = 6ab;
            7abA = 7ab;
            Date = "9-17-2017";
            Time = "19:26:38";
            anA = an;
            apnA = apn;
            q1A = 1;
            q2A = 2;
            q3A = 3;
            q4A = 4;
            q5A = 5;
            q6A = 6;
        };
        "20:16:15" =         {
            1abA = 1qwe;
            1abrA = 3;
            2abA = "D.C.";
            2abrA = 7;
            3abA = wedded;
            4abA = wedge;
            5abA = qdwfeg;
            6abA = qwfegr;
            7abA = wedge;
            Date = "9-17-2017";
            Time = "20:16:15";
            anA = "we're";
            apnA = apn;
            q1A = 7;
            q2A = 2;
            q3A = 7;
            q4A = 4;
            q5A = 5;
            q6A = 7;
        };
    };
}

我希望能够将标签设置为键 1abA 的值,但我似乎无法找到对数组进行排序的方法。

我正在使用此代码获取快照:

let userID = Auth.auth().currentUser?.uid
let ref = Database.database().reference().child("users").child(userID!) ref.child("PostGameEval").observe(.value, with: { (snapshot) in
            print(snapshot.value!)
        })

【问题讨论】:

  • “将标签设置为键 1abA 的值”是什么意思
  • @Siyavash 所以我希望能够将键 1abA 的值(即“1ab”)设置为 uilabel,那么我如何挑选出每个键并获取值

标签: arrays json firebase swift3 firebase-realtime-database


【解决方案1】:

我已经尝试过了,希望对你有帮助:

我已经把上图的数据如下:

这里dict相当于上面的snapshot.value

    let dict = [
        "9-17-2017" :    [
                "19:26:38" :        [
                        "1abA" : "1ab",
                        "1abrA" : 1
                ],
                "20:16:15" :         [
                        "1abA" : "1qwe",
                        "1abrA" : 3

                ],
                "19:23:38" :        [
                        "1abA" : "1ab",
                        "1abrA" : 1
                ],
                "21:16:15" :         [
                        "1abA" : "1qwe",
                        "1abrA" : 3

                ]

        ],
        "9-16-2017":   [
                "19:20:38" :        [
                        "1abA" : "1ax",
                        "1abrA" : 4
                ],
                "20:01:15" :         [
                        "1abA" : "1qe",
                        "1abrA" : 0

                ],
                "19:23:38" :        [
                        "1abA" : "1ab",
                        "1abrA" : 1
                ],
                "21:16:15" :         [
                        "1abA" : "1qwe",
                        "1abrA" : 3

                ]

        ]

]

注意:我认为在您的情况下,您可以获得dict,如下所示:

if let dict = snaphot.value as? [String : [String: [String: Any]] {
    //then use the following code here
}

现在获取键 1abA 的值我使用了以下代码:

let keys = Array(dict.keys)

var myLabel = ""
for i in 0..<keys.count {
        if let innerDict = dict[keys[i]] {
                let innerKeys = Array((innerDict).keys)
                let sortedInnerKeys = innerKeys.sorted(by: { $0 > $1} )
                for j in 0..<2 {
                        if let tempDict = innerDict[sortedInnerKeys[j]] {
                                //myLabel = tempDict["1abA"] as! String
                                print("Value of Key 1abA for innerKey \(sortedInnerKeys[j]) is \(tempDict["1abA"] ?? "")")
                                print("Value of Key 1abrA for innerKey \(sortedInnerKeys[j]) is \(tempDict["1abrA"] ?? "")")
                        }
                }
        }

}

输出:

innerKey 21:16:15 的 Key 1abA 的值为 1qwe

innerKey 21:16:15 的 Key 1abrA 的值为 3

innerKey 20:01:15 的 Key 1abA 的值为 1qe

innerKey 20:01:15 的 Key 1abrA 的值为 0

innerKey 21:16:15 的 Key 1abA 的值为 1qwe

innerKey 21:16:15 的 Key 1abrA 的值为 3

innerKey 20:16:15 的 Key 1abA 的值为 1qwe

innerKey 20:16:15 的键 1abrA 的值为 3

【讨论】:

  • 那么我怎样才能循环得到我原始json的所有键值
  • @WillMays 抱歉我听不懂,请举例说明,什么意思
  • 如果我想对 q1A 和 q2a 做同样的事情,我是否使用相同的代码,只需为每个值添加 tempDict["q1A"] 等等?
  • @WillMays 是的,我相信是的,您可以获得该字典中任何键的值
  • 如果我只想要基于时间的最后 7 个呢?
猜你喜欢
  • 2018-03-06
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多