【问题标题】:Accessing Nested NSDictionary values in Swift 3.0在 Swift 3.0 中访问嵌套的 NSDictionary 值
【发布时间】:2017-02-28 10:10:22
【问题描述】:

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

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 和其他解决方案,但没有成功。

如何访问数据键和图片键中的 url 值?

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

【问题讨论】:

  • 顺便说一句,当您进行另一个参考时,Firebase 不会发出另一个请求。所有这些 mombo jambo 都由 Firebase 客户端自己处理。
  • @CemalEker 哦,明白了!我措辞不正确。

标签: ios swift firebase nsdictionary


【解决方案1】:

当您快速引用字典的键时,您会得到一个未包装的值。这意味着它可以为零。您可以强制解开该值,也可以使用漂亮的 if let =

这应该可以工作。

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

【讨论】:

  • 嘿先生,不幸的是我得到了以下信息:类型'FIRDataSnapshot'没有下标成员
  • 如何进行?我目前在看:stackoverflow.com/questions/39136026/…
  • 那么它肯定不是字典。使用childSnapshotForPath: 方法并创建一个新快照。 childSnapshotForPath:"picture.data.url"
  • 这不返回值:snapshot.childSnapshot(forPath: "picture.data.url")
  • 知道怎么做吗,Cemal?
【解决方案2】:

尝试使用:-

 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

           }
   }

【讨论】:

    【解决方案3】:

    内联字典展开:

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

    【讨论】:

      【解决方案4】:

      可以使用如下语法,更漂亮:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-25
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多