Swift 可解码问题 - 无法为数组赋值
Swift Decodable issue - Trouble assigning value to an array
我在 self.tvShows = shows.data
处无法解决此错误
我收到错误消息无法将类型 'RecentTvListDays' 的值分配给类型“[TvShowDetails]?”
我已将 JSON 结构作为图像附在底部。希望这些足够了。
class TvHomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
fileprivate let cellId = "cellId"
var tvShows: [TvShowDetails]? = []
func fetchTvItems() {
let jsonUrlString = "https://www.what-song.com/api/air-episodes"
guard let url = URL(string: jsonUrlString) else
{return}
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {return}
do {
let shows = try
JSONDecoder().decode(RecentTvListData.self, from: data)
self.tvShows = shows.data
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
} catch let jsonErr {
print("Error serializing JSON", jsonErr)
}
}.resume()
}
}
型号
import UIKit
struct RecentTvListData: Decodable {
var data: RecentTvListDays
}
struct RecentTvListDays: Decodable {
var RecentTvListByDay: [TvShowDetails]
}
struct TvShowDetails: Decodable {
var _id: Int
var name: String
}
实际上,您似乎快到了。我相信您只需要更改一行:
self.tvShows = shows.data.RecentTvListByDay
就像我在评论中提到的那样,您只是在尝试设置为不同的类型(就像错误所说的那样)。
Side-note/tip:始终以小写字母开头变量和 属性 名称。 (符合约定并提高可读性)。
错误很明显,类型不匹配。查看您的代码:
- 数据源数组
tvShows
声明为[TvShowDetails]?
- 属性
data
在解码结构中的结果是RecentTvListDays
类型不同。这正是错误信息
Cannot assign value of type 'RecentTvListDays' to type '[TvShowDetails]?
告诉你。根据 JSON 结构,您必须分配
let shows = try JSONDecoder().decode(RecentTvListData.self, from: data)
self.tvShows = shows.data.RecentTvListByDay
我在 self.tvShows = shows.data
处无法解决此错误我收到错误消息无法将类型 'RecentTvListDays' 的值分配给类型“[TvShowDetails]?”
我已将 JSON 结构作为图像附在底部。希望这些足够了。
class TvHomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
fileprivate let cellId = "cellId"
var tvShows: [TvShowDetails]? = []
func fetchTvItems() {
let jsonUrlString = "https://www.what-song.com/api/air-episodes"
guard let url = URL(string: jsonUrlString) else
{return}
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {return}
do {
let shows = try
JSONDecoder().decode(RecentTvListData.self, from: data)
self.tvShows = shows.data
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
} catch let jsonErr {
print("Error serializing JSON", jsonErr)
}
}.resume()
}
}
型号
import UIKit
struct RecentTvListData: Decodable {
var data: RecentTvListDays
}
struct RecentTvListDays: Decodable {
var RecentTvListByDay: [TvShowDetails]
}
struct TvShowDetails: Decodable {
var _id: Int
var name: String
}
实际上,您似乎快到了。我相信您只需要更改一行:
self.tvShows = shows.data.RecentTvListByDay
就像我在评论中提到的那样,您只是在尝试设置为不同的类型(就像错误所说的那样)。
Side-note/tip:始终以小写字母开头变量和 属性 名称。 (符合约定并提高可读性)。
错误很明显,类型不匹配。查看您的代码:
- 数据源数组
tvShows
声明为[TvShowDetails]?
- 属性
data
在解码结构中的结果是RecentTvListDays
类型不同。这正是错误信息
Cannot assign value of type 'RecentTvListDays' to type '[TvShowDetails]?
告诉你。根据 JSON 结构,您必须分配
let shows = try JSONDecoder().decode(RecentTvListData.self, from: data)
self.tvShows = shows.data.RecentTvListByDay