This repository includes some useful tools for Codable
protocol and data decoding.
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
.
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
VDJSONEncoder
Purely Swift version of JSONEncoder
.
URLQueryEncoder
andURLQueryDecoder
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"
-
DictionaryDecoder
andDictionaryEncoder
-
NSManagedDecodable
,NSManagedEncodable
andNSManagedCodable
protocols
Protocols that make your NSManagedObject
subclasses confirm to Codable
protocol.
PlainCodingKey
Simple CodingKey
struct.
- Type reflection for
Decodable
types
let properties: [String: Any.Type] = Mirror.reflect(SomeType.self)
//or Mirror(SomeType.self).children
- 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.
Add the following line to your Podfile:
pod 'VDCodable'
and run pod update
from the podfile directory first.
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
Voidilov, voidilov@gmail.com
VDCodable is available under the MIT license. See the LICENSE file for more info.