Одна из проблем связана с urlPort
. Ваш json имеет значения Int
и String
для urlPort
. Вы можете определить собственный init для обработки этого.
struct sonosStatus: Codable {
let urlHostname: String
let urlPort: Int
let baseUrl: String
let sonosName: String
let uuid: String
let invisible: Bool
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
urlHostname = try values.decode(String.self, forKey: .urlHostname)
baseUrl = try values.decode(String.self, forKey: .baseUrl)
sonosName = try values.decode(String.self, forKey: .sonosName)
uuid = try values.decode(String.self, forKey: .uuid)
invisible = try values.decode(Bool.self, forKey: .invisible)
// you can define urlPort as optional or unwrap it.
if let intVal = try? values.decode(Int.self, forKey: .urlPort) {
urlPort = intVal
} else if let stringVal = try? values.decode(String.self, forKey: .urlPort) {
urlPort = Int(stringVal) ?? 0
} else {
urlPort = ""
}
}
}
А также ваш json является массивом sonosStatus
array.
Итак, вам нужно изменить Response
typealias, как показано ниже :
typealias Response = [[sonosStatus]]