如何从嵌套数组中返回值 - swift 3

时间:2016-10-28 04:55:03

标签: arrays swift dictionary swift3

我的api查询在数组中返回了几个值(如下所示),我需要将其用于其他函数。如何检索嵌套的值60?

我的代码例如let uid = value["uid"] as? String可以很好地返回uid和名字。 但对于let rest = value["field_resting_bpm"] as? String,它会返回nil。

如何更正此行以返回嵌套值'60'?:

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

api查询是:

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

var checkUserEndpoint:String =“https://example.site/ios1/user/1.json

   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用户帐户设置中的整数。我添加了一个文本字段(因此它应该返回一个字符串),名为field_rest_bpm_string,也用于测试

网站上的json返回:

“field_resting_bpm”:{ “UND”:[{ “值”: “60”}]}, “field_rest_bpm_string”:{ “UND”:[{ “值”: “65”, “格式”:空, “safe_value”: “65”}]}

1 个答案:

答案 0 :(得分:1)

注意:代码在Swift 3中,但您可以在swift 2中轻松转换。SwiftyJSON版本代码在2和3中相同。

如果您使用的是SwiftyJSON,那么事情就更简单了

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

如果您没有使用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

像这样。