Так что, не проходя много циклов проектирования и без промедления, я бы подумал попробовать общую поддержку Swift, например ...
struct BasicResponse<DataType>: Codable where DataType: Codable {
let success: Int
let data: [DataType]
}
Тогда вам просто нужно определитьреализация DataType
s, которую вы хотите использовать
struct User: Codable {
var name: String
}
и декодировать ее ...
let decoder = JSONDecoder()
let response = try decoder.decode(BasicResponse<User>.self, from: data)
print(response.data[0].name)
Теперь я просто бросил это на игровую площадку и протестировал с некоторыми базовымиdata ...
struct User: Codable {
var name: String
}
struct BasicResponse<T>: Codable where T: Codable {
let success: Int
let data: [T]
}
let data = "{\"success\": 200, \"data\": [ { \"name\":\"hello\" }]}".data(using: .utf8)!
let decoder = JSONDecoder()
do {
let response = try decoder.decode(BasicResponse<User>.self, from: data)
response.data[0].name
} catch let error {
print(error)
}
Возможно, вам придется «помассировать» дизайн, чтобы лучше соответствовать вашим потребностям, но это может дать вам место для начала