使用Swift从Firebase中的多个子节点获取数据?

时间:2019-01-07 08:32:43

标签: swift firebase firebase-realtime-database

enter image description here

我想从多个子节点获取数据?我能够从第一个子节点获取,但是无法获取下一个子节点级别。我只需要firebase中的帐户部分

我使用此功能来获取第一个子节点。

func compareAccount() {
        REF_DRIVERS.observeSingleEvent(of: .value) { (snapshot) in
            print(snapshot)
        }
    }

Snap (drivers) {
    9AyIYcizavM03ArvmQH1e3xQ7rD3 =     {
        account = Default;
        driverIsOnTrip = 0;
        isPickupModeEnabled = 0;
        provider = Firebase;
        userIsDriver = 1;
    };
    FCuTwkhtrbdBTx7akQI4NL49K5p1 =     {
        account = Default;
        coordinate =         {
            0 = "37.33233141";
            1 = "-122.0312186";
        };
        driverIsOnTrip = 0;
        isPickupModeEnabled = 0;
        provider = Firebase;
        userIsDriver = 1;
    };
    ML2Sxz6l78ZIZ0mO327nGmh0YkP2 =     {
        account = Default;
        driverIsOnTrip = 0;
        isPickupModeEnabled = 0;
        provider = Firebase;
        userIsDriver = 1;
    };
}

func compareAccount() {
        REF_DRIVERS.child("account").observeSingleEvent(of: .value) { (snapshot) in
            print(snapshot)
        }
    }

当我尝试仅打印帐户时。 它会打印此结果

管理(帐户)

1 个答案:

答案 0 :(得分:1)

当您侦听节点时,您将获得包含该节点所有数据的快照。如果该快照包含您不知道其密钥的子代(本例中为驱动程序ID),则可以遍历所有child nodes。如果您确实知道子节点的键(例如account属性),则可以使用childSnapshot(forPath:)来获取该节点。

因此,通过组合这些,您可以遍历驱动程序并按名称查找其属性:

REF_DRIVERS.observeSingleEvent(of: .value) { (snapshot) in
    for case let driverSnapshot as DataSnapshot in snapshot.children {
       print(driverSnapshot.key)
       print(driverSnapshot.childSnapshot(forPath:"account").value)
    }
}