以[AnyHashable:Any]的形式访问NSDictionary中的信息

时间:2016-12-01 18:25:30

标签: ios

我正在将代码从Objective C转换为Swift。我有一个代码,从swift方法调用一个客观的C方法。 obj C方法返回一个NSDictionary。显然,Swift将此对象视为类型[AnyHashable : Any]。我如何阅读此类信息?例如,对于NSDictionary,我会说NSString *s = [dict objectForKey:"key"]。我在Swift中调用什么来访问[AnyHashable : Any]类型的值?

由于

4 个答案:

答案 0 :(得分:2)

尝试使用以下代码打开您的结果:

if let dict = dict as NSDictionary? as! [String:Any]? {
  print(dict[key])
}

答案 1 :(得分:0)

您可以使用Objective-C中的下标。

夫特:

let s = dict["key"]

目标-C:

NSString *s = dict["key"] //is equivalent to [dict objectForKey:"key"]

答案 2 :(得分:0)

您可以这样获得:

onPress={() => this.props.navigation.closeDrawer()}

迅速

希望,其他人会从中获得帮助

答案 3 :(得分:0)

关于AnyHashable,如果您看看documentation,他们会举一个例子:

let descriptions: [AnyHashable: Any] = [
    AnyHashable(""): "emoji",
    AnyHashable(42): "an Int",
    AnyHashable(Int8(43)): "an Int8",
    AnyHashable(Set(["a", "b"])): "a set of strings"
]
print(descriptions[AnyHashable(42)]!)      // prints "an Int"

就我而言,我是从网站解析响应头的,所以我有一个密钥,它是一个字符串,值是另一个JSON对象。

解决方案很简单,使用上述语法获取整个对象并将其转换为字符串,然后使用JSONSerialization将其映射为[String : Any]类型:

if let jsonString = payload[AnyHashable("Key")] as? String,
   let data = jsonString.data(using: .utf8) {
   do {
       if let json = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [String : Any] {
           // json is now a [String : Any] type
   }
       else {
              print("JSON is invalid")
       }
      }
    catch {
           print("Exception converting: \(error)")
    }
}