Вам просто не хватало реализации Codable с классом ObjSportsIcon.
struct ObjSportsList : Codable {
var id:Int
var name:String
var slug:String
var icons:ObjSportsIcon
}
struct ObjSportsIcon : Codable {
var green:String
var grey:String
var white:String
var black:String
}
ИЛИ Вы можете использовать следующий код, чтобы сделать его правильным:
public struct ObjSportsList : Codable {
var id:Int
var name:String
var slug:String
var icons:ObjSportsIcon
public init(id: Int, name: String, slug: String, icons: ObjSportsIcon) {
self.id = id
self.name = name
self.slug = slug
self.icons = icons
}
public enum CodingKeys: String, CodingKey {
case id
case name
case slug
case icons
}
}
public struct ObjSportsIcon : Codable {
var green:String
var grey:String
var white:String
var black:String
public init(green: String, grey: String, white: String, black: String) {
self.green = green
self.grey = grey
self.white = white
self.black = black
}
public enum CodingKeys: String, CodingKey {
case green
case grey
case white
case black
}
}
Изменить следующую строкукод для решения вашей второй ошибки:
self.arrSports = try decoderdec.decode(Array<ObjSportsList>.self, from: jsonData)
Обновление от Vivek:
Я нашел свою ошибку и решение для второй ошибки
Старый код var arrSports:[[String:Any]] = []
Новый код var arrSports:[ObjSportsList] = []
Вы должны реализовать метод init (from decoder: Decoder) для достижения того же самого.Примечание. Необходимо установить значения по умолчанию для каждого свойства
struct ObjSportsIcon : Codable {
var green:String
var grey:String
var white:String
var black:String
var pink:String
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.green = try container.decodeIfPresent(String.self, forKey: .green) ?? "green"
self.grey = try container.decodeIfPresent(String.self, forKey: .grey) ?? "grey"
self.white = try container.decodeIfPresent(String.self, forKey: .white) ?? "white"
self.black = try container.decodeIfPresent(String.self, forKey: .black) ?? "black"
self.pink = try container.decodeIfPresent(String.self, forKey: .pink) ?? "pink"
}
}