swift - swift - '(AnyObject)' 不是 'NSObject' 的子类型
问题描述
我是快速开发的新手,我遵循了一个教程,一切都很好,直到我遇到这个错误并且我不知道如何修复它。你能帮助我吗 ?
if let json = response.result.value {
let jsonArray:NSArray = json as! NSArray
/// On fait la boucle pour avoir la liste globale des éléments a afficher
for i in 0..<jsonArray.count {
self.OPlays.append(Playlist(
title:(jsonArray[i] as AnyObject).value(forKey: "title") as? String,
artist:(jsonArray[i] as AnyObject).value(forKey: "artist") as? String,
categorie:(jsonArray[i] as AnyObject).value(forKey: "categorie") as? String,
cover_url:(jsonArray[i] as AnyObject).value(forKey: "cover_url") as? String)
)
}
self.tableViewPlaylist.reloadData()
}
新闻文件正确。
if let json = response.result.value {
let jsonArray:NSArray = json as! NSArray
/// On fait la boucle pour avoir la liste globale des éléments a afficher
for i in 0..<jsonArray.count {
self.OPlays.append(Playlist(
id: (jsonArray[i] as AnyObject).value(forKey: "id") as? Int,
title: (jsonArray[i] as AnyObject).value(forKey: "title") as? String,
artist: (jsonArray[i] as AnyObject).value(forKey: "artist") as? String,
cover_url: (jsonArray[i] as AnyObject).value(forKey: "cover_url") as? String,
categorie: (jsonArray[i] as AnyObject).value(forKey: "categorie") as? String
))
}
self.tableViewPlaylist.reloadData()
}
解决方案
我会删除所有这些AnyObject
代码:
if let array = response.result.value as? [[String: Any]] {
for dictionary in array {
self.OPlays.append(Playlist(
id: dictionary["id"] as? Int,
title: dictionary["title"] as? String,
artist: dictionary["artist"] as? String,
categorie: dictionary["categorie"] as? String,
cover_url: dictionary["cover_url"] as? String
))
}
self.tableViewPlaylist.reloadData
}
就个人而言,我会更进一步,摆脱手动解码 JSON 的业务。使用JSONDecoder
.
struct Playlist: Codable {
let id: Int?
let title: String?
let artist: String?
let categorie: String?
let cover_url: String?
}
然后,假设您拥有data
的是未包装的Data
对象:
do {
self.OPlays = JSONDecoder().decode([Playlist].self, from: data)
} catch {
print(error)
}
或者,如果您使用的是 Alamofire,请考虑使用基于 - 方法的 Alamofire JSONDecoder
5 response
。
推荐阅读
- networkx - networkx: 直径给 13 想找到那些节点或距离是什么
- javascript - 如何在 React 中将道具传递给 {children}?
- git - Github Action 自托管到 Heroku 登录错误
- c - 如何修复 HackerRank 的“错误:控制到达非无效函数 [-Werror=return-type] 的末尾”?
- r - 收集平均值并组合多个折线图
- javascript - 构造样式 - 如何通过 Chrome 扩展 (JS/CSS) 进行更改
- react-native - “npx react-native start”挂起
- mongodb - MongoDB 在使用 UNIQUE 推荐代码的先前请求后不会添加新用户。MongoDB 网页“REFRESH”仅提供帮助。我做错了什么?
- java - 以排序方式在数组中插入整数的函数
- c - 以下哪个 C 数据结构使用更多内存?