从Firebase快照中提取字符串值

时间:2019-04-06 22:54:01

标签: swift firebase firebase-realtime-database

我是Swift的新开发人员。我正在使用Swift 4.2和Xcode 10.1。

我正在尝试从Firebase快照创建字符串数组。我可以通过设置结构模型并使用初始化程序来做到这一点,但是当我想直接在代码中执行而没有单独的结构时,它将无法工作。这是我的代码:

    // Get the likers
    dbRef.child("likers").observeSingleEvent(of: .value) { snapshot in

        // Declare an array to hold the Likers
        var retrievedLikers = [String]()

        // Loop through the retrieved likers and put into the array
        for child in snapshot.children {
            let snap = child as! DataSnapshot
            let dict = snap.value as! [String:Any]
            let likerId = dict["userId"] as? String ?? ""
            print (likerId)
            retrievedLikers.insert(likerId, at: 0)
        }
            likers = retrievedLikers
        }

我的firebase数据模型如下:

enter image description here

我尝试了几种方法。上面的代码是基于另一个SO建议的最新代码。

问题是我无法使用snap.value创建字典。快照具有正确的数据。我收到一个错误消息:“无法将'__NSCFString'类型的值大小写为'NSDictionary'。但是快照显示为字典。这是屏幕截图:

enter image description here

任何帮助将不胜感激。我已经尝试了3个小时来解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以尝试

let res = snapshot.value as! [String:String] 
retrievedLikers = Array(res.values)

此处崩溃snap.valueString,无法转换为[String:Any]

let dict = snap.value as! [String:Any]