gpt4 book ai didi

ios - 无法将类型 '(key: String, value: AnyObject)' 的值转换为预期的参数类型 '[String : AnyObject]'

转载 作者:可可西里 更新时间:2023-11-01 17:13:03 24 4
gpt4 key购买 nike

我试图从我得到的 JSON 响应中获取 thumbnail_imagesurl,如下图所示: enter image description here因此,为了访问 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)) 我得到这个错误:

Cannot convert value of type '(key: String, value: AnyObject)' to expected argument type '[String : AnyObject]'

这就是我的问题,但我认为共享更多代码是相关的,因为为了访问 url 我必须创建更多类 ThumbImagesMedLargeImage。其中有以下代码:

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 条件永远不会为真。

最佳答案

  • 首先,所有类都应该以单数形式命名 Post/ThumbImage。数据源数组,例如posts 包含 Post 实例,每个 Post 实例包含 ThumbImage 实例的数组 thumbnailImages .这些语义使设计更容易理解。
  • Swift 3+ 中的第二个 JSON 字典是 [String:Any]
  • 第三,根据初始化规则,super 调用必须在初始化所有存储的属性之后执行。

key thumbnail_images 的值是一个包含字典的字典。发生此错误是因为您使用的是 array 枚举语法,该语法将字典视为元组数组。

字典可以被解析为使用作为大小名称和来传递参数。

我不知道您为什么要使用 NSObject 子类,但我相信您有自己的理由。


这是缩略图

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))
}
}
}
}

关于ios - 无法将类型 '(key: String, value: AnyObject)' 的值转换为预期的参数类型 '[String : AnyObject]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46391655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com