2016-10-19 10 views
1

私はFirebaseから受け取った以下のデータを持っています。 snapshotValueをNSDictionaryにしました。Swift 3.0のネストされた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、および他の解決策はまだありません運を試してみました。

データキーと画像キー内のurl値にアクセスするにはどうすればよいですか?

Firebaseで別の参照を作成して値を取得できますが、別の要求を保存しようとしています。

+0

ところであなたはFirebaseは、別の要求を送信していない別の参照を行うとき。これらのmombo jamboはすべてFirebaseクライアント自身によって処理されます。 –

+0

@CemalEker Oh gotcha!私はそれを間違って言いました。 –

+0

この回答を確認してください https://stackoverflow.com/a/43715807/3806350 –

答えて

1

すぐに辞書のキーを参照すると、ラップされていない値が返されます。これはそれがゼロであることを意味します。あなたは値をアンラップすることができますか、またはかなり使用することができますif let =

これはおそらく動作するはずです。

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

残念ながら私は次のようなことがあります:タイプ 'FIRDataSnapshot'には添え字のメンバーはありません –

+0

続行するには?私は現在見ている:http://stackoverflow.com/questions/39136026/type-any-has-no-subscript-members-firebase –

+0

それは間違いなく辞書です。 'childSnapshotForPath:'メソッドを使用して、新しいスナップショットを作成します。 'childSnapshotForPath:" picture.data.url "' –

0

使用してみてください: -

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 

      } 
    } 
0

インライン辞書アンラップ:

let url = ((snapshot.value as? NSDictionary)?["picture"] as? NSDictionary)?["url"] as? String 
関連する問題