【问题标题】:how to return value from nested array - swift 3如何从嵌套数组中返回值 - swift 3
【发布时间】:2016-10-28 04:55:02
【问题描述】:

我的 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":[{"value":"60"}]},"field_rest_bpm_string":{"und":[{"value":"65","format":null, "safe_value":"65"}]}

【问题讨论】:

  • 首先检查你的结构。 field_resting_bpm 是一个字典,它有一个数组und,其中第一个对象有一个名为“value”的键值,值为 60
  • 好提示,谢谢。刚刚检查并在我的 Drupal7 站点中,此字段在我的用户帐户中,字段类型为 Integer。我正在尝试将建议的代码更改为 Int 的选项,到目前为止还没有运气。我也会尝试将 Drupal 用户设置中的字段更改为字符串。

标签: arrays swift dictionary swift3


【解决方案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

类似的东西。

【讨论】:

  • 在 Swift 中,使用本机 Dictionary 和 Array 代替 NSDictionaryNSArray 是击球手
  • true... 但我更喜欢使用SwiftyJSON。有时本地也取决于需要。这里有一个参考,对于 swift 数组,我们使用值,即 struct
  • 我说的是NSDictionaryNSArray 而不是SwiftyJSON
  • 非常感谢您的帮助。我正在使用 SwiftyJSON(并且在文件顶部有“import SwiftyJSON”),所以我首先尝试过。结果:在我添加这些可选值之前,XCode 出现了关于可选值的红色错误!代码是这样的:'let rest = value["field_resting_bpm"]!!["und"]!![0]["value"]!!.stringValue' 但是它返回 nil 并崩溃。有什么想法吗?
  • 在尝试不使用 SwiftyJSON 并使用 NSDictionary 的代码时,在以 'let und =' 开头的行上,我收到红色错误“NSDictionary 类型的值没有成员值”。想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多