这是我的代码的一部分:
let quotesData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary var quoteDictionary: [NSDictionary]! quoteDictionary = quotesData["response"] as! [NSDictionary]
这是Tumblr API的JSON的一部分:
{ "meta": { "status": 200, "msg": "OK" }, "response": { "blog": { "title": "A Sea of Quotes", "name": "aseaofquotes", "total_posts": 10089, "posts": 10089, "url": "http://www.aseaofquotes.com/", "updated": 1461556819, "description": "", "is_nsfw": false, "ask": true, "ask_page_title": "Thanks in advance if you leave a nice message and/or correct quote sources. Please check FAQs before sending. I do not respond to Anonymous questions, but I may answer your anon question in the FAQ. :) Warning: It may take me a while to reply.", "ask_anon": true, "submission_page_title": "Submit A Quote", "share_likes": false }, "posts": [ { "blog_name": "aseaofquotes", "id": 143359277336, "post_url": "http://www.aseaofquotes.com/post/143359277336/marlon-james-a-brief-history-of-seven-killings", "slug": "marlon-james-a-brief-history-of-seven-killings", "type": "photo", "date": "2016-04-25 04:00:18 GMT", "timestamp": 1461556818, "state": "published", "format": "html", "reblog_key": "YiiqHC46",
等等。
这是我的错误:
Could not cast value of type '__NSDictionaryM' (0x101925d38) to 'NSArray' (0x101925900).
在这行上:
quoteDictionary = quotesData["response"] as! [NSDictionary]
我不明白为什么。我对JSON和iOS还是很陌生,但是“响应”对我来说就像字典,我不知道为什么它是NSArray,我也不知道如何解决这个问题。任何帮助将不胜感激。
这不是重复的,因为其他帖子没有帮助我解决此问题。
错误消息说
无法将 实际 类型NSDictionary强制转换为 预期 类型NSArray
[NSDictionary]表示字典的数组,但是的值response显然是字典,由一对大括号表示。
[NSDictionary]
response
所以实际上
let quoteDictionary = quotesData["response"] as! NSDictionary
但是建议使用Swift本机集合类型
let quoteDictionary = quotesData["response"] as! Dictionary<String,AnyObject>