首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift: NSDictionary as NSArray

Swift: NSDictionary as NSArray
EN

Stack Overflow用户
提问于 2017-10-23 11:59:55
回答 3查看 1.9K关注 0票数 0
代码语言:javascript
复制
let voicemailFiles = voicemail.value( forKey: "voicemail") as! [AnyObject]            
// Could not cast value of type '__NSDictionaryI' (0x10ca8a228) to 'NSArray' (0x10ca89d78)


let voicemailFiles = voicemail.value( forKey: "voicemail") as! [String : String]
// Could not cast value of type '__NSArrayI' (0x104df9448) to 'NSDictionary' (0x104df7fa8).

当尝试将JSON (如下面所示)放入变量中时,我碰到了"voicemail"的2种转换方法的上述错误。

代码语言:javascript
复制
let config = voicemail.value(forKey: "config") as AnyObject

配置键的这一行工作得很好。

voicemail的变量是键voicemailboxes[AnyObject]值。

代码语言:javascript
复制
{
  "voicemailboxes": [
    {
      "config": {
        "id": "5",
        "description": "Test"
      },
      "voicemail": [
        {
          "id": "id001",
          "caller": "...",
          "caller_UK": "...",
          "called": "+...",
          "called_UK": "...",
          "received": "...",
          "duration_seconds": "..."
        },
        {
          "id": "id002",
          "caller": "...",
          "caller_UK": "...",
          "called": "..."
        }
      ]
    }
  ]
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-23 13:10:26

根据您的JSON,很明显

voicemailboxes[[string:Any]] (字典阵列)

voicemail[[String:String]] (字典阵列)

注意::检查正确响应所需的guardif let只是一个例子

你可以像

((dictMain["voicemailboxes"] as! [[String:Any]]).first!["voicemail"] as! [[String:Any]])

希望这对你有帮助

票数 0
EN

Stack Overflow用户

发布于 2017-10-23 12:10:05

语音信箱是一组字典。

语音信箱也是一系列字典。

需要对它们进行适当的解析。在操场上:

代码语言:javascript
复制
let json = """
{
"voicemailboxes": [
{
"config": {
"id": "5",
"description": "Test"
},
"voicemail": [
{
"id": "id001",
"caller": "...",
"caller_UK": "...",
"called": "+...",
"called_UK": "...",
"received": "...",
"duration_seconds": "..."
},
{
"id": "id002",
"caller": "...",
"caller_UK": "...",
"called": "..."
}
]
}
]
}
"""
let data = json.data(using: .utf8)!
let jsonDict = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! [String:Any]
let voicemailboxes = jsonDict["voicemailboxes"] as! [Any]
let voicemailboxesfirst = voicemailboxes.first as! [String:Any]
let voicemail = voicemailboxesfirst["voicemail"] as! [Any]
let voicemailfirst = voicemail.first as! [String:Any]
print(voicemailfirst)

输出:

“接收”:.,“呼叫”::+.,"id":id001,"caller_UK":.,"duration_seconds":.,“来电者”:.,"called_UK":.

票数 1
EN

Stack Overflow用户

发布于 2017-10-23 12:12:28

使用以下代码

代码语言:javascript
复制
if let any = voicemail.value( forKey: "voicemail") {
            if let tmpArray = any as? Array {
                let voicemailFiles = tmpArray
            }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46888832

复制
相关文章

相似问题

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