Skip to content

Type-erased wrappers for Encodable, Decodable, and Codable values


Notifications You must be signed in to change notification settings


Repository files navigation


Build Status License Swift Version Cocoapods platforms Cocoapods compatible Carthage compatible

Type-erased wrappers for Encodable, Decodable, and Codable values.

This functionality is discussed in Chapter 3 of Flight School Guide to Swift Codable.


Swift Package Manager

Add the AnyCodable package to your target dependencies in Package.swift:

import PackageDescription

let package = Package(
  name: "YourProject",
  dependencies: [
        url: "",
        from: "0.6.0"

Then run the swift build command to build your project.


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 AnyCodable to 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".


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.



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)


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 can be used to wrap values for encoding and decoding.




Mattt (@mattt)