Декодирование и кодирование JSON стало простым после появления протокола Codable в Swift 4.0. Но в процессе разработки мне хотелось чего-то более короткого и изящного, чем конструкция Do-Catch вида:

var myModel: MyModel?
let decoder = JSONDecoder()

do {
    myModel = try decoder.decode(MyModel.self, from: data)
} catch {
    print(error.localizedDescription)
}

Или вот такого:

let myModel: MyModel? = try? decoder.decode(MyModel.self, from: data)

Поэтому я написал протокол с реализацией по умолчанию, который позволяет декодировать вот так:

let myModel = MyModel.decodeFromData(data: data)

И так же — кодировать:

let data = MyModel.encode(fromEncodable: myModel)

Всё, что нужно, — добавить соответствие протоколу:

extension MyModel: Parseable {
    typealias ParseableType = Self
}

Доступно на GitHub как Swift Package: https://github.com/makoni/parsable