Вы можете сделать корневую структуру, представляющую общий ответ сети, это позволит вам сохранять части success
и message
общими для всех специализированных ответов.
struct NetworkResponse<ResponseData:Codable>: Codable {
let success: Bool
let message: String
let data: ResponseData
}
Не следует создаватьПользовательские типы с тем же именем, что и встроенные типы, поскольку это может привести к путанице, особенно для других людей, читающих ваш код, поэтому я переименовал ваш пользовательский тип Data
в ResponseData
.
Например, вы можетесоздайте модель LoginResponse
и расшифруйте ее, как показано ниже.Вы можете сделать то же самое для других ответов из того же API.
let loginResponse = """
{
"success" : true,
"message" : "",
"data" : {
"username":"test",
"token":"whatever"
}
}
"""
struct LoginResponse: Codable {
let username: String
let token: String
}
do {
print(try JSONDecoder().decode(NetworkResponse<LoginResponse>.self, from: Data(loginResponse.utf8)))
} catch {
print(error)
}