2016-10-19 10 views
1

Firebase에서받은 다음 데이터가 있습니다. 내 snapshotValue를 NSDictionary로 만들었습니다.Swift 3.0에서 중첩 된 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) 
     } 

enter image description here 나는 How do I manipulate nested dictionaries in Swift, e.g. JSON data?, How to access deeply nested dictionaries in Swift 및 기타 솔루션 아직 행운을 시도했다.

데이터 키와 그림 키 내의 url 값에 어떻게 액세스합니까?

Firebase에서 다른 참조를 만들고 값을 가져올 수 있지만 다른 요청을 저장하려고합니다.

+0

이 BTW 중포 기지가 또 다른 요청을 보내지 않습니다. 모든 mombo jambo는 Firebase 클라이언트 자체에서 처리됩니다. –

+0

@CemalEker Oh gotcha! 나는 그 말을 잘못했다. –

+0

하시기 바랍니다이 대답을 확인하십시오 https://stackoverflow.com/a/43715807/3806350 –

답변

1

신속하게 사전의 키를 참조하면 래핑되지 않은 값을 얻을 수 있습니다. 즉, 0이 될 수 있습니다. 당신은 값을 언랩하거나 꽤 쓸 수 있습니다. 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