【问题标题】:Access snapshot data get from firebase database访问从 firebase 数据库获取的快照数据
【发布时间】:2016-11-19 11:17:10
【问题描述】:

我正在开发使用 Firebase 数据库的 iOS 项目。

我有一个观察者来观察添加到我的 Firebase 数据库中的新数据:

rootRef.observeEventType(.childAdded, withBlock: {(snap) in
  // I try to access "positions" like this
  if let mySnap = snap {
     let positions = mySnap.childSnapshot(forPath: "positions").value as? Array
     // But the positions is nil
})

收到的snap是这样的(是print(snap)):

Optional( Snap (-KWoKFfKZOkFyoLI9at_) {
    positions =     {
        0 =         {
            x = 80;
            y = 212;
        };
        1 =         {
            x = 80;
            y = "212.5";
        };
        10 =         {
            x = 83;
            y = 229;
        }
     };
});

访问从 firebase 数据库获取的“位置”数据的正确方法是什么?

【问题讨论】:

    标签: swift firebase firebase-realtime-database swift3


    【解决方案1】:

    由于您在评论中添加了mySnap.childSnapshot(forPath: "positions").value 的响应,它是DictionaryArray 类型,因此将其类型转换为[[String: Any]]

    let positions = mySnap.childSnapshot(forPath: "positions").value as? [[String: Any]]
    

    【讨论】:

    • 让我们忘记排序。我不明白为什么在[Int : [String : Any]] 中使用Int,我没有整数键,为什么你首先建议这样做?正如您在我的问题中看到的,快照键是这样的 -KWoKFfKZOkFyoLI9at_ 你能解释一下为什么使用 Int 吗?
    • 但我已经在我的问题中显示了整个snapshot。它是从print(snap) 生成的
    • 我正在处理这个mySnap.childSnapshot(forPath: "positions").value 尝试在不投射的情况下打印这个。
    • 这里是:Optional(<__NSArrayM 0x60800005e870>( { x = "105.5"; y = 145; }, { x = "105.5"; y = "145.5"; }, { x = "105.5"; y = 146; }, { x = "105.5"; y = 146; } ) )
    • 那么你的演员应该和Array一起工作,像let positions = mySnap.childSnapshot(forPath: "positions").value as? [[String: Any]]一样尝试一次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2017-01-30
    • 2017-07-27
    • 2020-06-21
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多