Наконец-то появилась возможность продемонстрировать один из Codable
протоколов скрытых гемов. Пожалуйста, запустите следующее на игровой площадке:
import Cocoa
let jsonData = """
{
"sender" : "Kira",
"created" : "08.05.2018",
"text" : "Cncncm"
}
""".data(using: .utf8)!
struct SenderText: Codable {
let sender: String
let created: Date
let text: String
}
let dayFormatter = DateFormatter()
dayFormatter.dateFormat = "dd.MM.yyyy"
let date = dayFormatter.date(from:"08.05.2018")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(dayFormatter)
do {
let sendText = try decoder.decode(SenderText.self, from: jsonData)
print(sendText)
} catch {
print(error)
}
Простая элегантность того, как легко определить такой сложный синтаксический анализатор, отображающий грязную JSON-строку в ваш любимый struct
, вряд ли когда-нибудь перестанет удивлять меня. Независимо от того, как странно выглядит ваш формат даты, он не более чем на 3 строки от анализа в процессе.
Есть что-то, касающееся приведения типов, которое вы должны заметить: в Swift, как и в большинстве объектно-ориентированных языков, вы можете * приводить что-то к чему-то другому, если (и только если) это уже что-то еще в первую очередь (но это знание где-то было потеряно). Поскольку ваш String
"просто" String
(возможно, замаскированный Any
), вы не сможете наложить на что-либо еще. Однако протокол Codable
предоставляет вам потрясающие средства для decode
из Strings
Data
с удивительной легкостью. Этот процесс не следует путать с актерами, даже если он выглядит практически одинаково. Это создание и инициализация другого, более подходящего по структуре объекта из простого куска Data
, который вы, вероятно, получили от своего обычного веб-сервиса.
Отлично, по крайней мере, в моей книге.