Skip to content

Instantly share code, notes, and snippets.

@omochi
Created June 5, 2021 16:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save omochi/7204f0e3c9a8fd483fa7651f397b1447 to your computer and use it in GitHub Desktop.
Save omochi/7204f0e3c9a8fd483fa7651f397b1447 to your computer and use it in GitHub Desktop.
import Foundation

enum E: Codable {
  case a(Int???)
}

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let value: [E] = [
    .a(.none),
    .a(.some(.none)),
    .a(.some(.some(.none))),
    .a(.some(.some(.some(1))))
]
let json = try encoder.encode(value)
print(String(data: json, encoding: .utf8)!)
[
  {
    "a" : {

    }
  },
  {
    "a" : {
      "_0" : null
    }
  },
  {
    "a" : {
      "_0" : null
    }
  },
  {
    "a" : {
      "_0" : 1
    }
  }
]
import Foundation

enum E: Codable {
  case a(Int???)
}

let decoder = JSONDecoder()
let json = """
[
  {
    "a" : {

    }
  },
  {
    "a" : {
      "_0" : null
    }
  },
  {
    "a" : {
      "_0" : null
    }
  },
  {
    "a" : {
      "_0" : 1
    }
  }
]
""".data(using: .utf8)!
let value = try decoder.decode([E].self, from: json)
dump(value)
▿ 4 elements
  ▿ main.E.a
    - a: nil
  ▿ main.E.a
    - a: nil
  ▿ main.E.a
    - a: nil
  ▿ main.E.a
    ▿ a: Optional(Optional(Optional(1)))
      ▿ some: Optional(Optional(1))
        ▿ some: Optional(1)
          - some: 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment