首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >演员AnyObject?to [字符串:AnyObject?]总是失败

演员AnyObject?to [字符串:AnyObject?]总是失败
EN

Stack Overflow用户
提问于 2016-04-04 09:09:50
回答 2查看 3.3K关注 0票数 1

最初,我在SWIFT2.1中使用了这段代码

代码语言:javascript
复制
func onSuccess(jsonData: AnyObject?){
    print(jsonData["message"]) 
}

升级到SWIFT2.2之后,我得到了一个错误,例如

对“下标”的模糊引用

对于行print(jsonData["message"])

我把代码改成了这个

代码语言:javascript
复制
func onSuccess(jsonData: AnyObject?) {

        let json = (jsonData as? [String:AnyObject?]) ?? ["":""]
        print(json)
}

但是,这个语句总是失败的,因为AnyObject?字符串:AnyObject?类型铸造不会发生,并获得零合并值。我想从AnyObject?[String:AnyObject]键入强制转换。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-04 09:21:24

获得Ambiguous reference to 'subscript'是因为SWIFT2.2中的jsonData["message"],您应该使用objectForKey而不是"key“。在您的情况下,您应该像这样编写代码,这是您的第一个问题。

您的第二个问题是,您确定您的JSON数据是字典吗?我认为您的数据是字典数组。如果我是对的。你应该把你的jsonData转换成这样的字典数组;

代码语言:javascript
复制
if let json = jsonData as? [[String:AnyObject?]] {
    for data in jsonData { // Enumerate the array of dicts to get value.
        print(data.objectForKey("message"))
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-04-04 09:16:26

您可以简单地使用以下可选绑定:

代码语言:javascript
复制
func onSuccess(jsonData: AnyObject?) {
    if let json = jsonData as? [String:AnyObject] {
        print(json["message"])
    }
}

没有很好的理由将字典值声明为像[String:AnyObject?]这样的可选值,因为Swift字典总是返回选项词。

这个例子是用来解码字典的。

现在,如果您的jsonData不是字典,而是一组字典,那么您只需调整类型:

代码语言:javascript
复制
func onSuccess(jsonData: AnyObject?) {
    if let json = jsonData as? [[String:AnyObject]] {
        for object in json {
            print(object["message"])
        }
    }
}

等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36398566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档