Сбрасываемый инициализатор будет работать лучше здесь:
protocol Mappable: Codable {
init(jsonString: String) throws
}
extension Mappable {
init(jsonString: String) throws {
let data = jsonString.data(using: .utf8)! // this will never be nil
self = try JSONDecoder().decode(Self.self, from: data)
}
}
Таким образом, ваш протокол не глотает ошибки, и вызывающие абоненты могут просто использовать try?
на своей стороне, если они не заботятся об ошибке.