Если вы пытаетесь декодировать любой тип объекта, используйте эту технику
1. Общая функция
private func createWeatherObjectWith<T: Decodable>(json: Data, Object:T.Type ,completion: @escaping (_ data: T?, _ error: Error?) -> Void) {
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let weather = try decoder.decode(T.self, from: json)
return completion(weather, nil)
} catch let error {
return completion(nil, error)
}
}
2. Расширяемый Декодируемый
extension Decodable {
static func map(JSONString:String) -> Self? {
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
return try decoder.decode(Self.self, from: Data(JSONString.utf8))
} catch let error {
print(error)
return nil
}
}
}
Использование:
let user = User.map(JSONString:"your JSON string")
let users = [User].map(JSONString:"your JSON string")