Swiftpack.co - dankinsoid/VDCodable as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by dankinsoid.
dankinsoid/VDCodable 2.1.0
This repository includes some useful tools for Codable protocol and data decoding.
⭐️ 1
🕓 6 days ago
iOS macOS
.package(url: "https://github.com/dankinsoid/VDCodable.git", from: "2.1.0")


CI Status Version License Platform


This repository includes some useful tools for Codable protocol and data decoding.


  1. JSON

JSON enum makes it easy to deal with JSON data. Use String, Int subscripts and dynamic member lookup ("dot" syntax) to retrieve a value:

if let name = json.root.array[0]?.name.string {...}
//or if let name = json["root"]["array"][0]["name"]?.string {...}

JSON enum uses purely Swift JSON serialization based on Swift Protobuf implementation, which is extremely fast. Confirms to Codable.

  1. VDJSONDecoder

An object that decodes instances of a data type from JSON objects. Main differences from Foundation JSONDecoder:

  • Decoding non-string types from quoted values (like "true", "0.0")
  • Custom JSON parsing via (([CodingKey], JSON) -> JSON) closure
  • Purely Swift and faster
  1. VDJSONEncoder

Purely Swift version of JSONEncoder.

  1. URLQueryEncoder and URLQueryDecoder

Encoder and decoder for query strings.

struct SomeStruct: Codable {
  var title = "Query_string"
  let number = 0
let baseURL = URL(string: "https://base.url")!
let value = SomeStruct() 
let url = try? URLQueryEncoder().encode(value, for: baseURL)
//url = "https://base.url?title=Query_string&number=0"
  1. DictionaryDecoder and DictionaryEncoder

  2. NSManagedDecodable, NSManagedEncodable and NSManagedCodable protocols

Protocols that make your NSManagedObject subclasses confirm to Codable protocol.

  1. PlainCodingKey

Simple CodingKey struct.

  1. Type reflection for Decodable types
let properties: [String: Any.Type] = Mirror.reflect(SomeType.self)
//or Mirror(SomeType.self).children
  1. Tools for creating custom encoders/decoders

Based on similar logic when writing different encoders/decoders DecodingUnboxer and EncodingBoxer protocols were implemented. Examples of usage are all encoders in decoders in this repo.


  1. CocoaPods

Add the following line to your Podfile:

pod 'VDCodable'

and run pod update from the podfile directory first.

  1. Swift Package Manager

Create a Package.swift file.

// swift-tools-version:5.0
import PackageDescription

let package = Package(
  name: "SomeProject",
  dependencies: [
    .package(url: "https://github.com/dankinsoid/VDCodable.git", from: "0.13.0")
  targets: [
    .target(name: "SomeProject", dependencies: ["VDCodable"])
$ swift build


Voidilov, voidilov@gmail.com


VDCodable is available under the MIT license. See the LICENSE file for more info.


Stars: 1
Last commit: 6 days ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics