苦苦挣扎着弄清楚如何处理我的可解码数组,它有不同的类型和结构。本质上,它是一个数据数组,它导致一个包含4种类型的数组,每种类型都包含另一组搜索结果。
您是否可以对具有不同格式的数组使用decodable?或者它只是使用对象dicts?
我会在底部附上我的JSON
struct SearchData: Decodable {
var success: Bool
var server_response_time: Int
var data: [SearchDataType]
}
//This is the array of 3 of the group types: "Movies", "TV-Shows", "Artists"
struct SearchDataType: Decodable {
let group: String
let data: [SearchDataMovies]
}
// Where group = "Movies"
struct SearchDataMovies: Decodable {
let title: String
let year: String
}
// Where group = "TV-Shows"
struct SearchDataTV: Decodable {
let title: String
let year: Int
}
// Where group = "Artists"
struct SearchDataArtists: Decodable {
let name: String
}
答案 0 :(得分:2)
Decodable不会将组中的字符串视为不同的组。因此,让组:“组:电影”,“组:电视”和“组:游戏”没有任何意义。 JSON中的所有组都处于同一级别。
这将是您的模型:
struct SearchData: Decodable {
var success: Bool
var server_response_time: Int
var data: [SearchDataType]
}
//组名和组数组。
struct SearchDataType: Decodable {
let group: String
let data: [SearchDataForGroup]
}
//其中组=任何组(“电影”,“电视”,“游戏”等)
struct SearchDataForGroup: Decodable {
let title: String
let year: String
}
如果您想使用可解码的名称来呼叫组名:
在顶层声明一个变量:
let allGroupNames = [data] = []
然后在解码功能中,您可以像这样从组中拉出所有组名:
let mygroups = try decoder.decode(SearchData.self, from: data)
mygroups.data中的groupValue {
self.all groupNames = groupValue.group
print(groupNames)
}
从那里开始,如果您打算创建一个带有部分的tableView,则可以使用:
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return allGroupNames[section].group
}
不确定这是否是您的意图,但希望这可以帮助您入门。