在 swift4 中将自定义对象数组转换为字符串

Convert array of custom object to String in swift4

我是 Swift 的新手,在将自定义对象数组转换为字符串时遇到问题。

这是我的回复class门票

public struct Tickets: Codable {
        public let name: String!
        public let status: String!
        public let department: String!
    }

网络服务调用后,我得到以下响应,它将映射到票证 class。现在,我有一个 "Tickets" 数组,如下所述 [Tickets]。

"tickets": [
    {
      "name": "d5b5d618-8a74-4e5f",
      "status": "VALID",
      "department": "IT"
    },
    {
      "name": "a58f54b5-9420-49b6",
      "status": "INVALID",
      "department": "Travel"
    }
  ]

现在,我可以将 [Tickets] 的数组转换为字符串吗?如果是这样,如何?此外,如何从 String 的 class 中将其恢复为 [Tickets]

我想把它转成String后存到UserDefaults中,以后再取回

首先:

永远不要将结构或 class 中的属性或成员声明为隐式解包可选,如果它们应该在 init 方法中初始化。如果它们可以 nil 将它们声明为常规可选 (?) 否则为非可选(是的,如果没有问号或感叹号,编译器不会抱怨)。

只需使用 JSONDecoder()JSONEncoder()

对 JSON 进行解码和编码
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)
}