Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios firebase中的快照。如何深入了解快照_Ios_Swift_Firebase_Snapshot - Fatal编程技术网

Ios firebase中的快照。如何深入了解快照

Ios firebase中的快照。如何深入了解快照,ios,swift,firebase,snapshot,Ios,Swift,Firebase,Snapshot,目前我的数据是这样的 { 'listone': { 'entrydate1': { 'random key 1': { 'name': 'Chris'; 'date': '24 May 2016' } 'random key 2':

目前我的数据是这样的

{
    'listone':
        {
        'entrydate1':
            {
            'random key 1':
                {
                'name': 'Chris';
                'date': '24 May 2016'
                }
            'random key 2':
                {
                'name': 'John';
                'date': '25 May 2016'
                }
            }
        'entrydate2':
            {
            'random key 1':
                {
                'name': 'Chris';
                'date': '24 May 2016'
                }
            'random key 2':
                {
                'name': 'John';
                'date': '25 May 2016'
                }
            }
        }
}
该随机密钥由firebase
childByAutoID()生成

问题是,当我获取快照时,如何获取每个随机键的详细信息?基本上,我需要从
listone
中检索数据,然后通过排序最早的
entrydate
来填充我的
tableview
。但是,在获取快照后,我不知道如何从快照中获取信息

     override func viewDidLoad() {
    super.viewDidLoad()
    ref = FIRDatabase.database().reference()
    let uid = FIRAuth.auth()!.currentUser!.uid

    let listOneRef = ref.child(uid + "/listone")

    _ = listOneRef.observeEventType(.Value, withBlock: { (snapshot) in


        for item in snapshot.children {
            let child = item.children.allObjects

            for snap in child {
                //anyitems was initialized as [AnyObject] array
                self.anyitems.append(snap)

            }
        }
     self.tableView.reloadData()
    })
我不知道如何真正利用这些细节。当我打印
anyitems
时,我确实看到了一些细节,例如

[Snap (-KJ-jqTNf3MTtY8YRH-3) {
Name = "Chris";
Date = "30 May 2016";
}, Snap (-KJ01QYoTedZkClsf13Y) {
Name = "John";
Date = "30 May 2016";
}]

我现在不在Xcode上,所以无法验证,但应该是这样的:

for snapshot in anyitems {
    print(snapshot.value.objectForKey("Name"))
}
我认为订阅也应该起作用:

for snapshot in anyitems {
    print(snapshot.value["Name"])
}

如果需要将类型告知编译器:

for snapshot in anyitems as! [FIRDataSnapshot] {
    print(snapshot.value.objectForKey("Name"))
}
但是,正如您所注意到的,最好在访问其内容之前安全地强制转换阵列:

if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {

}

谢谢你的回答。但是,anyitems是
AnyObject
。因此不会有
snapshot.value
,这就是我制作第三个示例的原因。:)哦,对了!我试过了,但它不起作用,但当我让…=。。。它成功了。基本上,从一开始我就声明,如果让snapshots=snapshot.children.allObjects as?[FIRDataSnapshot]
继续我的循环,我会得到正确的输出,谢谢!也许您可以编辑您的答案,我可以将其标记为正确。我已将错误的“快照”修复为我答案中的“FIRDataSnapshot”,谢谢!我知道不签入Xcode会犯错误P