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