【问题标题】:Cannot subscript a value of a type AnyObject, in Swift不能在 Swift 中下标 AnyObject 类型的值
【发布时间】:2015-08-08 09:40:09
【问题描述】:

我有这行代码,我想提取“title”键:

var title = jParams["title"] as! String

但是它不会让我编译,如果我得到这个红色的错误消息:

不能使用 String 类型的索引为 AnyObject 类型的值下标

当使用println(jParams) 在日志中显示 jParams 的内容时,我得到以下内容:

INCOMING LIST PARAMETERS (jParameters)
Optional({
    title = "Example List";
    values =     (
                {
            id = 1;
            name = "Line 1";
        },
                {
            id = 2;
            name = "Line 2";
        },
                {
            id = 3;
            name = "Line 3";
        }
    );
})

我是 Swift 新手,所以我不熟悉处理 JSON 来处理这类问题的细节。有什么问题?

//jParams comes from a JSON server response
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
            if data != nil {
                var jdata = JSON(data: data!)
                var jParams=jdata["responseData"]["extraData"]["params"]

【问题讨论】:

  • jParams 是如何定义的?它是什么类型的?
  • 嗨@MarcosCrispino 我已经在答案中添加了一段代码。

标签: json swift nsdictionary


【解决方案1】:

在您的编辑中,您似乎正在使用 SwiftyJSON。

如果确实如此,您可以使用 SwiftyJSON 的 dictionaryValue 属性帮助编译器了解字典中的内容:

let jParams = jdata["responseData"]["extraData"]["params"].dictionaryValue

那么您应该能够在不向下转换的情况下访问您的值:

let title = jParams["title"]

因为 SwiftyJSON 会推断出正确的值类型。

【讨论】:

  • 这是正确答案,应该这样标记。此外,如果您仍然想要一个可选的字典,您可以使用dictionary 属性。
  • 像魅力一样工作!我确实在使用 SwiftyJSON,“.dictionaryValue”是关键,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多