VDCodable

master

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

VDCodable

CI Status Version License Platform

Description

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

Usage

  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.

Installation

  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: "2.13.0")
    ],
  targets: [
    .target(name: "SomeProject", dependencies: ["VDCodable"])
    ]
)
$ swift build

Author

Voidilov, voidilov@gmail.com

License

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

Description

  • Swift Tools 5.7.0
View More Packages from this Author

Dependencies

Last updated: Mon Mar 18 2024 21:37:20 GMT-0900 (Hawaii-Aleutian Daylight Time)