在Swift 3.0中访问嵌套的NSDictionary值

时间:2016-10-19 00:12:59

标签: ios swift firebase nsdictionary

我从Firebase收到以下数据。我已将snapshotValue设为NSDictionary。

enter image description here

self.ref.child("users").child(facebookID_Firebase as! String).observeSingleEvent(of: .value, with: { (snapshot) in
            let snapshotValue = snapshot.value as? NSDictionary
            print(snapshotValue, "snapshotValue")
            //this line of code doesn't work
            //self.pictureURL = snapshot["picture"]["data"]["url"]
        }) { (error) in
            print(error.localizedDescription)
        }

我尝试了How do I manipulate nested dictionaries in Swift, e.g. JSON data?How to access deeply nested dictionaries in Swift和其他解决方案,但没有运气。

如何访问数据键和图片密钥中的网址值?

我可以在Firebase中创建另一个引用并获取值,但我正在尝试保存另一个请求。

4 个答案:

答案 0 :(得分:2)

当您在swift中引用词典的键时,您会获得一个未包装的值。这意味着它可以是零。您可以强制解包该值,也可以使用漂亮的if let =

这应该可行。

if let pictureUrl = snapshot["picture"]["data"]["url"] {
    self.pictureURL = pictureUrl
}

答案 1 :(得分:1)

尝试使用: -

 if let pictureDict = snapshot.value["picture"] as? [String:AnyObject]{

        if let dataDict = pictureDict.value["data"] as? [String:AnyObject]{

              self.pictureURL =  dataDict.value["url"] as! String

           }
   }

答案 2 :(得分:0)

内联字典解包:

let url = ((snapshot.value as? NSDictionary)?["picture"] as? NSDictionary)?["url"] as? String

答案 3 :(得分:0)

您可以使用以下语法:更漂亮:

    if let pictureDict = snapshot.value["picture"] as? [String:AnyObject],
        let dataDict = pictureDict.value["data"] as? [String:AnyObject] {
            self.pictureURL =  dataDict.value["url"] as! String
        }
    }