我正试图从我收到的JSON响应中获取$ heroku run bash
$ rails c
url
,如下图所示:
因此,为了达到thumbnail_images
,我创建了一个名为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))
}
}
}
}
行上,我收到此错误:
无法将类型'(key:String,value:AnyObject)'的值转换为预期的参数类型'[String:AnyObject]'
这是我的问题,但我认为分享更多代码是相关的,因为为了达到self.thumbnail_images.append(ThumbImages(dict: img))
我需要更多的课程url
和ThumbImages
。其中包含以下代码:
MedLargeImage
正如您在屏幕截图中看到的那样。所以最后我在房间里可以获得URL:
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]))
}
}
}
更新
如果我将帖子类中的class MedLargeImage: NSObject {
var imageUrl: String?
init(dict: [String: AnyObject]) {
super.init()
self.imageUrl = dict["url"] as? String
}
}
更改为:
if let postImage
错误消失了,但if条件永远不会成真。
答案 0 :(得分:5)
Post
/ ThumbImage
命名。数据源阵列,例如posts
包含Post
个实例,每个Post
实例包含thumbnailImages
个实例的数组ThumbImage
。这些语义使得理解设计变得更容易。[String:Any]
super
调用。 key thumbnail_images
的值是包含字典的字典。发生此错误是因为您使用数组枚举语法将字典视为元组数组。
可以解析字典以使用key
作为大小名称,使用value
来传递参数。
我不知道你为什么要使用NSObject
子类,但我确定你有理由。
这是Thumbnail
类
class ThumbImage: NSObject {
let size: String
var url : URL?
let width : Int
let height : Int
init(size : String, parameters: [String: Any]) {
self.size = size
if let urlString = parameters["url"] as? String {
self.url = URL(string: urlString)
}
self.width = parameters["width"] as? Int ?? 0
self.height = parameters["height"] as? Int ?? 0
super.init()
}
}
这是Post
类
class Post: NSObject {
var title: String
var excerpt: String
var content: String
var thumbnailImages = [ThumbImage]()
init(dict: [String: Any])
{
self.title = dict["title"] as? String ?? ""
self.excerpt = dict["excerpt"] as? String ?? ""
self.content = dict["content"] as? String ?? ""
super.init()
if let images = dict["thumbnail_images"] as? [String: [String:Any] ] {
for (key, value) in images {
thumbnailImages.append(ThumbImage(size: key, parameters: value))
}
}
}
}
答案 1 :(得分:1)
您正在看到该错误消息,因为您正在循环postImage
,就像它是一个数组一样,当它实际上是一个字典时。在ThumbImages
类初始化程序中,您希望接收字典。但是,由于您循环遍历postImage
字典,因此会返回键值对中的元组。
因此,当您尝试将此元组传递到ThumbImages
初始化器时,编译器会抱怨它无法将您的元组转换为字典。
立即传入字典将解决错误:
if let postImage = dict["thumbnail_images"] as? [String: AnyObject] {
self.thumbnail_images.append(ThumbImages(dict: postImage))
}
答案 2 :(得分:0)
您不能直接将元组作为字典传递。 改为使用这个: 让dicFromArray = [tuple.key:tuple.value]