Type-erased wrappers for Encodable, Decodable, and Codable values.
This functionality is discussed in Chapter 3 of Flight School Guide to Swift Codable.
Installation
Swift Package Manager
Add the AnyCodable package to your target dependencies in Package.swift:
import PackageDescription let package = Package( name: "YourProject", dependencies: [ .package( url: "https://github.com/Flight-School/AnyCodable", from: "0.6.0" ), ] )
Then run the swift build command to build your project.
CocoaPods
You can install AnyCodable via CocoaPods
by adding the following line to your Podfile:
pod 'AnyCodable-FlightSchool', '~> 0.6.0'
Run the pod install command to download the library
and integrate it into your Xcode project.
Note The module name for this library is "AnyCodable" --- that is, to use it, you add
import AnyCodableto the top of your Swift code just as you would by any other installation method. The pod is called "AnyCodable-FlightSchool" because there's an existing pod with the name "AnyCodable".
Carthage
To use AnyCodable in your Xcode project using Carthage,
specify it in Cartfile:
github "Flight-School/AnyCodable" ~> 0.6.0
Then run the carthage update command to build the framework,
and drag the built AnyCodable.framework into your Xcode project.
Usage
AnyEncodable
import AnyCodable let dictionary: [String: AnyEncodable] = [ "boolean": true, "integer": 1, "double": 3.141592653589793, "string": "string", "array": [1, 2, 3], "nested": [ "a": "alpha", "b": "bravo", "c": "charlie" ], "null": nil ] let encoder = JSONEncoder() let json = try! encoder.encode(dictionary)
AnyDecodable
let json = """ { "boolean": true, "integer": 1, "double": 3.141592653589793, "string": "string", "array": [1, 2, 3], "nested": { "a": "alpha", "b": "bravo", "c": "charlie" }, "null": null } """.data(using: .utf8)! let decoder = JSONDecoder() let dictionary = try! decoder.decode([String: AnyDecodable].self, from: json)
AnyCodable
AnyCodable can be used to wrap values for encoding and decoding.
License
MIT
Contact
Mattt (@mattt)