Конвертировать массив пользовательских объектов в строку в 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)
}
Другие вопросы по тегам