Конвертировать массив пользовательских объектов в строку в swift4
Я новичок в Swift и у меня проблема с преобразованием массива пользовательских объектов в String.
Это мой ответ класс Билеты
public struct Tickets: Codable {
public let name: String!
public let status: String!
public let department: String!
}
После вызова веб-службы я получаю следующий ответ, и он будет привязан к классу билетов. Теперь у меня есть массив "Билетов" как [Билеты], описанный ниже.
"tickets": [
{
"name": "d5b5d618-8a74-4e5f",
"status": "VALID",
"department": "IT"
},
{
"name": "a58f54b5-9420-49b6",
"status": "INVALID",
"department": "Travel"
}
]
Теперь я могу преобразовать массив [Tickets]
нанизывать? Если так, то как? Кроме того, как вернуть его как [Tickets]
из класса String
,
Я хочу сохранить его в UserDefaults после преобразования его в строку и получить его позже
1 ответ
Прежде всего:
Никогда не объявляйте свойства или члены в структуре или классе как неявные развернутые необязательные, если они должны быть инициализированы в init
метод. Если бы они могли быть nil
объявить их как обычные необязательные ( ?
) иначе как необязательный (да, компилятор не будет жаловаться, если нет вопроса или восклицательного знака).
Просто декодируйте и кодируйте JSON с помощью JSONDecoder()
а также JSONEncoder()
let jsonTickets = """
{"tickets":[{"name":"d5b5d618-8a74-4e5f","status":"VALID","department":"IT"},{"name":"a58f54b5-9420-49b6","status":"INVALID","department":"Travel"}]}
"""
public struct Ticket: Codable {
public let name: String
public let status: String
public let department: String
}
do {
let data = Data(jsonTickets.utf8)
let tickets = try JSONDecoder().decode([String:[Ticket]].self, from: data)
print(tickets)
let jsonTicketsEncodeBack = try JSONEncoder().encode(tickets)
jsonTickets == String(data: jsonTicketsEncodeBack, encoding: .utf8) // true
} catch {
print(error)
}