最初,我在SWIFT2.1中使用了这段代码
func onSuccess(jsonData: AnyObject?){
print(jsonData["message"])
}升级到SWIFT2.2之后,我得到了一个错误,例如
对“下标”的模糊引用
对于行print(jsonData["message"])
我把代码改成了这个
func onSuccess(jsonData: AnyObject?) {
let json = (jsonData as? [String:AnyObject?]) ?? ["":""]
print(json)
}但是,这个语句总是失败的,因为AnyObject?字符串:AnyObject?类型铸造不会发生,并获得零合并值。我想从AnyObject?到[String:AnyObject]键入强制转换。有可能吗?
发布于 2016-04-04 09:21:24
获得Ambiguous reference to 'subscript'是因为SWIFT2.2中的jsonData["message"],您应该使用objectForKey而不是"key“。在您的情况下,您应该像这样编写代码,这是您的第一个问题。
您的第二个问题是,您确定您的JSON数据是字典吗?我认为您的数据是字典数组。如果我是对的。你应该把你的jsonData转换成这样的字典数组;
if let json = jsonData as? [[String:AnyObject?]] {
for data in jsonData { // Enumerate the array of dicts to get value.
print(data.objectForKey("message"))
}
}发布于 2016-04-04 09:16:26
您可以简单地使用以下可选绑定:
func onSuccess(jsonData: AnyObject?) {
if let json = jsonData as? [String:AnyObject] {
print(json["message"])
}
}没有很好的理由将字典值声明为像[String:AnyObject?]这样的可选值,因为Swift字典总是返回选项词。
这个例子是用来解码字典的。
现在,如果您的jsonData不是字典,而是一组字典,那么您只需调整类型:
func onSuccess(jsonData: AnyObject?) {
if let json = jsonData as? [[String:AnyObject]] {
for object in json {
print(object["message"])
}
}
}等。
https://stackoverflow.com/questions/36398566
复制相似问题