2016-10-28 3 views
0

내 API 쿼리가 배열에서 여러 값을 반환하고 있습니다 (아래 참조). 추가 기능을 위해 사용해야합니다. 중첩 된 값 60은 어떻게 검색합니까?중첩 된 배열에서 값을 반환하는 방법 - swift 3

내 코드 예 : let uid = value["uid"] as? String은 uid와 name을 반환하는 데 적합합니다. 그러나 let rest = value["field_resting_bpm"] as? String의 경우 nil을 반환합니다.

let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! 
    let base64Credentials = credentialData.base64EncodedStringWithOptions([]) 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 

var에 checkUserEndpoint : 문자열 = "https://example.site/ios1/user/1.json"

어떻게 중첩 된 값 '60'?

let rest = value["field_resting_bpm"] as? String' 

은 API 쿼리입니다 반환이 줄을 수정 않는다

Alamofire.request(.GET, checkUserEndpoint, parameters: nil, headers: headers, encoding: .JSON) 
     .responseJSON { response in 
      guard response.result.error == nil else { 
       print("ran alamofire") 
       //got an error in getting the data, need to handle it 
       print("error calling GET") 
       print(response.result.error!) 
       return 
      } 

      guard let value = response.result.value else { 
       print("no result data received when calling GET") 
       return 
      } 
      // return UID 
      print("ran alamofire") 
      var datareturned = JSON(value) 
      print("VALUE: \(value)") 

내 콘솔에 다음을 반환합니다.

uid = 1; 
name = "Guest User"; 
"field_resting_bpm" =  { 
    und =   (
        { 
      value = 60; 
     } 
    ); 

업데이트 :이 필드는 Drupal 사용자 계정 설정의 정수입니다. 나는 또한 사이트에

json으로 테스트를 위해, (그래서 문자열을 반환해야합니다) 텍스트 필드를 추가 field_rest_bpm_string라는 이름의 한 반환

"field_resting_bpm을": { "놀이": [{ "값을" "60"}]} "field_rest_bpm_string"{ "놀이": [{ "값": "65", "포맷"널 "safe_value": "65"}]}

+0

구조를 먼저 확인하십시오. 'field_resting_bpm'은 사전입니다. 첫 번째 객체에는 "value"라는 키 값이 있고 값은 60 –

+0

입니다. 좋은 팁입니다. 감사합니다. 그냥 확인하고 내 Drupal7 사이트 에서이 필드는 내 사용자 계정에 정수 필드 유형입니다. Int로 제안 된 코드를 변경하는 옵션을 시도하고 있습니다. 지금까지는 행운이 없습니다. Drupal 사용자 설정의 필드를 문자열로 변경하려고합니다. –

답변

1

NOTE 코드는 스위프트 3에 있지만 쉽게 전환 할 수 있습니다. SwiftyJSON 버전 코드는 2와 3에서 동일합니다.

SwiftyJSON을 사용하는 경우 이 같은 SwiftyJSON

let rest = value["field_resting_bpm"] as? NSDictionary 
let und = (rest?.value(forKey: "und") as! NSArray).object(at: 0) as! NSDictionary 
let yourValue = und.value(forKey: "value") as! String 

뭔가를 사용하지 않는 경우 INGS는

let value = datareturned["field_resting_bpm"]["und"][0]["value"].stringValue 
print(value) 

꽤 많이 간단합니다.

+1

Swift에서는 NSDictionary와 NSArray 대신 네이티브 사전과 배열을 사용합니다. –

+0

사실 ...하지만 SwifftyJSON을 사용하는 것을 선호합니다. 또한 때때로 네이티브는 필요에 따라 다릅니다. 여기에 참조가 있습니다. 우리는 값을 사용하고 있습니다. 구조체 –

+0

저는'NSDictionary'와'NSArray'에 대해서'SwiftyJSON'가 아니라 –

관련 문제