【问题标题】:Looping an AnyHashable Dictionary循环 AnyHashable 字典
【发布时间】:2021-11-25 01:01:29
【问题描述】:

我正在尝试循环从 Http 响应中获得的信息,但我无法访问数据。 这是目前我试图循环的信息:

我试图使用 For 来访问响应的不同元素,但无法弄清楚如何访问字典中的元素,这是我正在使用的代码:

var dictionaryMessage: NSMutableDictionary?
            do {
                if let data = result?.data(using: .utf8) {
                    dictionaryMessage = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSMutableDictionary
                    if(dictionaryMessage?["precios"] != nil){
                        var element = dictionaryMessage?["precios"]
                        for (index, element) in element![0]{
                            print("index" + index + "element:" + element)
                        }
                    }
                }
            } catch {
                //error handling
            }
            

我希望找到访问此数据的正确方法,因为目前我收到此错误:

【问题讨论】:

  • 这不是数组,而是字典。

标签: ios arrays swift loops hashable


【解决方案1】:

代码中存在一些问题。 Swift 是一种强类型语言,对于 NS... 集合类型,您会得到未指定的 Any(Object),并且您必须有条件地向下转换所有类型。

precios 的值是一个数组,其中包含String 键和Int 值,因此封闭字典dictionaryMessage[String:[[String:Int]]]

var dictionaryMessage : [String:[[String:Int]]]?
do {
    if let data = result?.data(using: .utf8) {
        dictionaryMessage = try JSONSerialization.jsonObject(with: data) as? [String:[[String:Int]]]
        if let precios = dictionaryMessage?["precios"] {
            for item in precios {
                for (index, element) in item {
                    print("index: \(index) element: \(element)")
                }
            }
        }
    }
} catch {
    print(error)
}

或者如果数组中只有一个元素

do {
    if let data = result?.data(using: .utf8) {
        dictionaryMessage = try JSONSerialization.jsonObject(with: data) as? [String:[[String:Int]]]
        if let precios = dictionaryMessage?["precios"]?.first {
            for (index, element) in precios {
                print("index: \(index) element: \(element)")
            }
        }
    }
} catch {
    print(error)
}

【讨论】:

    【解决方案2】:

    你可以试试

    var element = dictionaryMessage!["precios"] as! [[String:Any]]
    

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2021-05-30
      • 2017-07-22
      • 2011-08-21
      • 2021-05-23
      • 2016-05-01
      相关资源
      最近更新 更多