-1

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

这是我的响应班门票

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

在网络服务调用之后,我得到以下响应,它将被映射到门票类。现在,我有一个“Tickets”数组,如下所述。

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

现在,我可以将数组转换[Tickets]为字符串吗?如果是这样,怎么做?另外,如何[Tickets]String.

我想在将其转换为字符串后将其存储到 UserDefaults 中,稍后再检索

4

1 回答 1

2

首先:

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

JSONDecoder()只需使用和解码和编码 JSONJSONEncoder()

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)
}
于 2018-02-05T17:14:00.373 回答