【发布时间】:2018-03-05 14:57:28
【问题描述】:
我正在尝试从收到的 JSON 响应中获取 url 的 url,如下图所示:
所以为了到达url,我创建了一个名为Posts的类,其中
class Posts: NSObject {
var title: String?
var excerpt: String?
var content: String?
var thumbnail_images: [ThumbImages] = []
init(dict: [String: AnyObject])
{
super.init()
self.title = dict["title"] as? String
self.excerpt = dict["excerpt"] as? String
self.content = dict["content"] as? String
if let postImage = dict["thumbnail_images"] as? [String: AnyObject] {
for img in postImage {
self.thumbnail_images.append(ThumbImages(dict: img))
}
}
}
}
在线self.thumbnail_images.append(ThumbImages(dict: img))我得到这个错误:
无法将类型“(键:字符串,值:AnyObject)”的值转换为预期的参数类型“[字符串:AnyObject]”
这就是我的问题,但我认为分享更多代码是相关的,因为为了到达url,我必须参加更多课程ThumbImages 和MedLargeImage。其中有以下代码:
class ThumbImages: NSObject {
var medium_large: [MedLargeImage] = []
init(dict: [String: AnyObject]) {
super.init()
if let imgURL = dict["medium_large"] {
for iURL in imgURL as! [AnyObject] {
medium_large.append(MedLargeImage(dict: iURL as! [String : AnyObject]))
}
}
}
正如您在屏幕截图中看到的那样。所以最后我在可以获取 URL 的房间里:
class MedLargeImage: NSObject {
var imageUrl: String?
init(dict: [String: AnyObject]) {
super.init()
self.imageUrl = dict["url"] as? String
}
}
更新:
如果我将 Posts 类中的 if let postImage 更改为:
if let postImage = dict["thumbnail_images"] as? [[String: AnyObject]] {
for img in postImage {
self.thumbnail_images.append(ThumbImages(dict: img))
}
}
错误消失了,但 if 条件永远不会为真。
【问题讨论】:
-
您将
postImage视为一个数组,但它是一个字典。这就是为什么你在循环时得到这个元组,你从字典中得到键和值的元组。 -
@Moritz 如果我将其更改为
if let postImage = dict["thumbnail_images"] as? [[String: AnyObject]]它可以工作,但if let不会移动到运行for命令。 -
不要在 Swift 3 中使用
[String:AnyObject]作为 JSON 字典表示。 JSON 字典是[String:Any],因为所有 JSON 字典值都是 (Swift) 值类型。此外,查看您当前对Posts的实现,我认为没有理由从NSObject继承。