From 9e6107b23d82c5ee2dec1b3008e9b8ad4f6f8baf Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 4 Nov 2019 18:39:11 -0500 Subject: [PATCH 1/6] XCode 11 / Swift 5 support --- Decodable.xcodeproj/project.pbxproj | 23 +++++++++++------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 +++++++ .../xcschemes/Decodable-Mac.xcscheme | 24 ++++++++----------- .../xcschemes/Decodable-iOS.xcscheme | 24 ++++++++----------- .../xcschemes/Decodable-tvOS.xcscheme | 6 +---- .../xcschemes/Decodable-watchOS.xcscheme | 6 +---- Generator/Generator.swift | 1 + Sources/Decodable.swift | 2 +- Sources/NSValueCastable.swift | 2 +- Tests/DecodeAsOneOfTests.swift | 4 ++-- 10 files changed, 50 insertions(+), 50 deletions(-) create mode 100644 Decodable.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Decodable.xcodeproj/project.pbxproj b/Decodable.xcodeproj/project.pbxproj index aa0439b..8b4bccc 100644 --- a/Decodable.xcodeproj/project.pbxproj +++ b/Decodable.xcodeproj/project.pbxproj @@ -469,7 +469,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = anviking; TargetAttributes = { 17FB80F61B530FED0012F106 = { @@ -480,11 +480,11 @@ }; 8FE7B5611B4C9FB900837609 = { CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 0900; + LastSwiftMigration = 1120; }; 8FE7B56B1B4C9FB900837609 = { CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 0900; + LastSwiftMigration = 1120; }; D0DC546E1B7814D200F79CB0 = { CreatedOnToolsVersion = 7.0; @@ -494,10 +494,11 @@ }; buildConfigurationList = 8FE7B55C1B4C9FB900837609 /* Build configuration list for PBXProject "Decodable" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 8FE7B5581B4C9FB900837609; productRefGroup = 8FE7B5631B4C9FB900837609 /* Products */; @@ -882,6 +883,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = bitcode; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -890,12 +892,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -945,6 +949,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; BITCODE_GENERATION_MODE = bitcode; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -953,12 +958,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -1016,7 +1023,7 @@ SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -1039,7 +1046,7 @@ SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -1053,7 +1060,7 @@ PRODUCT_BUNDLE_IDENTIFIER = anviking.DecodableTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -1068,7 +1075,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/Decodable.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Decodable.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Decodable.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Decodable.xcodeproj/xcshareddata/xcschemes/Decodable-Mac.xcscheme b/Decodable.xcodeproj/xcshareddata/xcschemes/Decodable-Mac.xcscheme index b50f67f..16780dc 100644 --- a/Decodable.xcodeproj/xcshareddata/xcschemes/Decodable-Mac.xcscheme +++ b/Decodable.xcodeproj/xcshareddata/xcschemes/Decodable-Mac.xcscheme @@ -1,6 +1,6 @@ + + + + @@ -40,17 +49,6 @@ - - - - - - - - + + + + @@ -40,17 +49,6 @@ - - - - - - - - - - - - - - - - [Element] { if ignoreInvalidObjects { - return try [Element?].decoder { try? Element.decode($0) }(j).flatMap {$0} + return try [Element?].decoder { try? Element.decode($0) }(j).compactMap {$0} } else { return try Array.decoder(Element.decode)(j) } diff --git a/Sources/NSValueCastable.swift b/Sources/NSValueCastable.swift index 695c72d..9bde1a2 100644 --- a/Sources/NSValueCastable.swift +++ b/Sources/NSValueCastable.swift @@ -46,7 +46,7 @@ extension NSValueCastable { public static func decode(_ j: Any) throws -> Self { let value: NSValue = try cast(j) let pointer = PointerOfSelf.allocate(capacity: 1) - defer { pointer.deallocate(capacity: 1) } + defer { pointer.deallocate() } value.getValue(pointer) return pointer.move() } diff --git a/Tests/DecodeAsOneOfTests.swift b/Tests/DecodeAsOneOfTests.swift index fead9d6..b6d897d 100644 --- a/Tests/DecodeAsOneOfTests.swift +++ b/Tests/DecodeAsOneOfTests.swift @@ -42,11 +42,11 @@ class DecodeAsOneOfTests: XCTestCase { XCTAssertEqual(vehicles1.count, vehicles2.count) XCTAssertEqual(vehicles1.count, vehiclesArray.count) - for truck in vehicles1.flatMap({ $0 as? Truck }) { + for truck in vehicles1.compactMap({ $0 as? Truck }) { XCTAssertEqual(truck.wheels, 18) } - let train = vehicles1.flatMap { $0 as? Train }.first! + let train = vehicles1.compactMap { $0 as? Train }.first! XCTAssertEqual(train.electric, true) } catch { From b9fef6e14086291a1c7ebae9af83bb6284351087 Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 4 Nov 2019 18:48:34 -0500 Subject: [PATCH 2/6] Fix optimization flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don’t optimize debug so test and call traces actually show up --- Decodable.xcodeproj/project.pbxproj | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Decodable.xcodeproj/project.pbxproj b/Decodable.xcodeproj/project.pbxproj index 8b4bccc..9e300dd 100644 --- a/Decodable.xcodeproj/project.pbxproj +++ b/Decodable.xcodeproj/project.pbxproj @@ -834,7 +834,8 @@ PRODUCT_BUNDLE_IDENTIFIER = anviking.DecodableTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Release; }; @@ -933,8 +934,9 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; + SWIFT_COMPILATION_MODE = singlefile; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; @@ -993,8 +995,8 @@ MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 9.0; VALIDATE_PRODUCT = YES; @@ -1022,7 +1024,6 @@ PRODUCT_NAME = Decodable; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; SWIFT_VERSION = 5.0; }; name = Debug; @@ -1045,7 +1046,6 @@ PRODUCT_NAME = Decodable; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; SWIFT_VERSION = 5.0; }; name = Release; @@ -1059,7 +1059,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = anviking.DecodableTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_COMPILATION_MODE = singlefile; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Debug; @@ -1073,8 +1074,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = anviking.DecodableTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Release; From 21bb0151687294759ed6fe8eee28416b3ebccc5f Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 4 Nov 2019 18:50:31 -0500 Subject: [PATCH 3/6] Fix bad tests JSON reading --- Tests/DecodableTests.swift | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Tests/DecodableTests.swift b/Tests/DecodableTests.swift index f58e6a1..a2c292f 100644 --- a/Tests/DecodableTests.swift +++ b/Tests/DecodableTests.swift @@ -14,8 +14,8 @@ import struct Decodable.KeyPath class DecodableTests: XCTestCase { - private func readJsonFile(_ file: String) -> NSDictionary { - let filePath = (Bundle(for: object_getClass(self)!).resourcePath! as NSString).appendingPathComponent(file) + private func readJsonFile(_ file: String, ofType: String) -> NSDictionary { + let filePath = Bundle(for: type(of: self)).path(forResource: file, ofType: ofType)! let jsonString = try! String(contentsOfFile: filePath) let jsonData = jsonString.data(using: String.Encoding.utf8)! return try! JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary @@ -23,7 +23,7 @@ class DecodableTests: XCTestCase { func testDecodeRepositoryExampleShouldSuccess() { // given - let json = readJsonFile("Repository.json") + let json = readJsonFile("Repository", ofType: "json") // when do { @@ -57,7 +57,7 @@ class DecodableTests: XCTestCase { private let Count = 500 func testDecodeArrayOfRepositoriesAndMeasureTime() { - let json = readJsonFile("Repository.json") + let json = readJsonFile("Repository", ofType: "json") let array = NSArray(array: Array(repeating: json, count: Count)) var result: [Repository] = [] @@ -72,7 +72,7 @@ class DecodableTests: XCTestCase { } func testCustomParseAndMeasureTime() { - let json = readJsonFile("Repository.json") + let json = readJsonFile("Repository", ofType: "json") let array = NSArray(array: Array(repeating: json, count: Count)) var result: [Repository] = [] @@ -129,7 +129,7 @@ class DecodableTests: XCTestCase { func testDecodeRepositoryExampleShouldThrowMissingKeyException() { // given - let json = readJsonFile("missingKey.json") + let json = readJsonFile("MissingKey", ofType: "json") // when do { @@ -146,7 +146,7 @@ class DecodableTests: XCTestCase { func testDecodeRepositoryExampleShouldThrowTypeMismatchException() { // given - let json = readJsonFile("typeMismatch.json") + let json = readJsonFile("TypeMismatch", ofType: "json") // when do { @@ -163,7 +163,7 @@ class DecodableTests: XCTestCase { func testDecodeRepositoryExampleNestedShouldThrowTypeMismatchException() { // given - let json: NSDictionary = ["key": readJsonFile("typeMismatch.json")] + let json: NSDictionary = ["key": readJsonFile("TypeMismatch", ofType: "json")] // when do { @@ -180,9 +180,8 @@ class DecodableTests: XCTestCase { func testDecodeRepositoryExampleShouldThrowNoJsonObjectException() { // given - let filePath = (Bundle(for: object_getClass(self)!).resourcePath! as NSString).appendingPathComponent("NoJsonObject.json") - let jsonString = try! String(contentsOfFile: filePath) - + let jsonString = readJsonFile("Repository", ofType: "json") + // when do { _ = try Repository.decode(jsonString) From 1a1f48f000f176d8c36854f35572f192deef08c9 Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 4 Nov 2019 19:00:42 -0500 Subject: [PATCH 4/6] Fix Swift PM support --- .gitignore | 1 + Package.swift | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 0568fec..2ef578e 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ Carthage/Build # General OS X .DS_Store +.swiftpm diff --git a/Package.swift b/Package.swift index 1d1b44e..48850bf 100644 --- a/Package.swift +++ b/Package.swift @@ -1,6 +1,23 @@ +// swift-tools-version:5.1 + import PackageDescription -let package = Package( - name: "Decodable", - exclude: [ "Tests" ] -) +let package = Package(name: "Decodable", + platforms: [ + .iOS(.v8), + .macOS(.v10_10), + .tvOS(.v9), + .watchOS(.v2) + ], + products: + [ + .library(name: "Decodable", + targets: ["Decodable"]) + ], + targets: [ + .target(name: "Decodable", + path: "Sources"), +// .testTarget(name: "DecodableTests", +// path: "Tests") + ], + swiftLanguageVersions: [.v5, .v4_2]) From b4abe98ed40326dd3bbb188c7631a9bbed654d36 Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 4 Nov 2019 19:07:28 -0500 Subject: [PATCH 5/6] Version 0.7.0 --- .swift-version | 1 - Decodable.podspec | 22 +++++++++----- README.md | 76 ++++++++++++++++++++++++++++++---------------- Sources/Info.plist | 2 +- Tests/Info.plist | 2 +- 5 files changed, 66 insertions(+), 37 deletions(-) delete mode 100644 .swift-version diff --git a/.swift-version b/.swift-version deleted file mode 100644 index 5186d07..0000000 --- a/.swift-version +++ /dev/null @@ -1 +0,0 @@ -4.0 diff --git a/Decodable.podspec b/Decodable.podspec index fc81359..da0a19b 100644 --- a/Decodable.podspec +++ b/Decodable.podspec @@ -1,12 +1,20 @@ Pod::Spec.new do |s| - s.name = "Decodable" - s.version = "0.6.0" - s.summary = "Swift JSON parsing done (more) right" - s.description = "Simple yet powerful object mapping made possible by Swift 2's error handling. Greatly inspired by Argo, but without any functional programming and bizillion operators." - s.homepage = "https://github.com/Anviking/Decodable" + s.name = 'Decodable' + s.version = '0.7.0' + s.summary = 'Swift JSON parsing done (more) right' + s.description = 'Simple yet powerful object mapping made possible by Swift 2\'s error handling. Greatly inspired by Argo, but without any functional programming and bizillion operators.' + s.homepage = 'https://github.com/Anviking/Decodable' s.license = 'MIT' - s.author = { "Anviking" => "anviking@me.com" } - s.source = { :git => "https://github.com/Anviking/Decodable.git", :tag => "#{s.version}" } + s.author = { + 'Anviking' => 'anviking@me.com', + 'Joe Mattiello' => 'jmattiello@newscorp.com' + } + s.source = { + :git => 'https://github.com/newscorp-ghfb/Decodable.git', + :tag => s.version.to_s + } + + s.swift_versions = ['4.2', '5.0'] s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.9' s.tvos.deployment_target = '9.0' diff --git a/README.md b/README.md index 3eddc7b..5462330 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Decodable + Simple and strict, yet powerful object mapping made possible by Swift 2's error handling. Greatly inspired by [Argo](http://github.com/thoughtbot/Argo), but without a bizillion functional operators. [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) @@ -6,7 +7,6 @@ Simple and strict, yet powerful object mapping made possible by Swift 2's error [![Platforms](https://cocoapod-badges.herokuapp.com/p/Decodable/badge.png)](https://cocoadocs.org/docsets/NSStringMask) [![Travis](https://img.shields.io/travis/Anviking/Decodable/master.svg)](https://travis-ci.org/Anviking/Decodable/branches) - ```swift struct Repository { @@ -15,22 +15,22 @@ struct Repository { let stargazersCount: Int let language: String? let sometimesMissingKey: String? - + let owner: User // Struct conforming to Decodable let defaultBranch: Branch // Struct NOT conforming to Decodable - + var fullName: String { return "\(owner.login)/\(name)" } } extension Repository: Decodable { static func decode(j: Any) throws -> Repository { return try Repository( - name: j => "nested" => "name", - description: j => "description", - stargazersCount: j => "stargazers_count", - language: j => "language", + name: j => "nested" => "name", + description: j => "description", + stargazersCount: j => "stargazers_count", + language: j => "language", sometimesMissingKey: j =>? "sometimesMissingKey", - owner: j => "owner", + owner: j => "owner", defaultBranch: Branch(name: j => "default_branch") ) } @@ -47,25 +47,31 @@ do { ## How does it work? ### A protocol + ```swift public protocol Decodable { static func decode(json: Any) throws -> Self } ``` + ### A parse-function + ```swift public func parse(json: Any, path: [String], decode: (Any throws -> T)) throws -> T ``` ### And shameless operator-overloading -The too-many generated overloads, all calling the `parse`-function, can be found in [Overloads.swift](https://github.com/Anviking/Decodable/blob/master/Sources/Overloads.swift). Return types include `T?`, `[T?]`, `[T?]?`, `Any` and `[String: T]?`. When conditional protocol conformance is supported in Swift this won't be necessary, and automagic decoding of infinitly nested generic types (like `[[[[[[[[[A???]]: B]]]?]]?]]`) would work. + +The too-many generated overloads, all calling the `parse`-function, can be found in [Overloads.swift](https://github.com/Anviking/Decodable/blob/master/Sources/Overloads.swift). Return types include `T?`, `[T?]`, `[T?]?`, `Any` and `[String: T]?`. When conditional protocol conformance is supported in Swift this won't be necessary, and automatic decoding of infinitely nested generic types (like `[[[[[[[[[A???]]: B]]]?]]?]]`) would work. An overload may look like this: + ```swift public func => (json: Any, keyPath: KeyPath) throws -> T ``` ## KeyPaths + Keypaths can be created from string and array literals as well as with explicit initializers. They can also be joined using the operators `=>` and `=>?`. `=>?` is another operator that indicates that `nil` should be returned if the key to the right is missing. - When composing `=>` and `=>?` operators in the same keypath, the strictness of `=>` is still honoured. @@ -78,10 +84,13 @@ let c: KeyPath = "a" => "b" => "c" let string: String? = json =>? "key1" => "key2" => "key3"` ^^^^ allowed to be missing ``` + ## Errors + Errors will be caught and rethrown in the decoding process to backpropagate metadata, like the JSON object that failed decoding, the key path to it, and the root JSON object. From [DecodingError.swift](https://github.com/anviking/decodable/tree/master/Sources/DecodingError.swift): + ```swift public enum DecodingError: ErrorProtocol, Equatable { /// Thrown when optional casting from `Any` fails. @@ -90,15 +99,15 @@ public enum DecodingError: ErrorProtocol, Equatable { /// that isn't a `NSDictionary`, and failing to cast a `Castable` /// primitive. case typeMismatch(expected: Any.Type, actual: Any.Type, Metadata) - + /// Thrown when a given, required, key was not found in a dictionary. case missingKey(String, Metadata) - + /// Thrown from the `RawRepresentable` extension when /// `init(rawValue:)` returned `nil`. case rawRepresentableInitializationError(rawValue: Any, Metadata) - - /// When an error is thrown that isn't `DecodingError`, it + + /// When an error is thrown that isn't `DecodingError`, it /// will be wrapped in `DecodingError.other` in order to also provide /// metadata about where the error was thrown. case other(ErrorProtocol, Metadata) @@ -121,26 +130,31 @@ do { ``` ## Handling Errors -Expressions like `j => "key"` will throw directly, and `catch`-statements can be used to create the most complex error handling behaviours. This also means that `try?` can be used to return nil if *anything* goes wrong instead of throwing. + +Expressions like `j => "key"` will throw directly, and `catch`-statements can be used to create the most complex error handling behaviours. This also means that `try?` can be used to return nil if _anything_ goes wrong instead of throwing. For convenience there is an operator, `=>?`, that only returns nil on missing keys, for APIs that indicate `null` in that manner, and to aid working with different response formats. -| Overload | Null Behaviour | Missing Key Behavior |Type Mismatch Behaviour | Errors in subobjects | -| ------------- |:-------------:|:-----:|:-----:|:-----:| -| `=> -> T`| throws | throws | throws | uncaught (throws) | -| `=> -> T?`| nil | throws | throws | uncaught (throws) | -| `=>? -> T?`| nil | nil | throws | uncaught (throws) | -| `try? => -> T `| nil | nil | nil | caught (nil) | +| Overload | Null Behaviour | Missing Key Behavior | Type Mismatch Behaviour | Errors in subjects | +| -------------- | :------------: | :------------------: | :---------------------: | :------------------: | +| `=> -> T` | throws | throws | throws | uncaught (throws) | +| `=> -> T?` | nil | throws | throws | uncaught (throws) | +| `=>? -> T?` | nil | nil | throws | uncaught (throws) | +| `try? => -> T` | nil | nil | nil | caught (nil) | ## Customization + `Int`, `Double`,`String`, `Bool`, `Date` (ISO8601), `NSArray`, and `NSDictionary` types that conform to `DynamicDecodable` with the following declaration: + ```swift public protocol DynamicDecodable { associatedtype DecodedType static var decoder: (Any) throws -> DecodedType {get set} } ``` + This allows Decodable to implement default decoding closures while allowing you to override them as needed. + ```swift // Lets extend Bool.decoder so that it accepts certain strings: Bool.decoder = { json in @@ -155,15 +169,18 @@ Bool.decoder = { json in } ``` -Note that when extending new types to conform to `Decodable` there is really no point in conforming to `DynamicDecodable` since you already control the implementation. Also note that the `decoder` properties are intended as "set once". If you need different behaviour on different occations, please create custom decode functions. +Note that when extending new types to conform to `Decodable` there is really no point in conforming to `DynamicDecodable` since you already control the implementation. Also note that the `decoder` properties are intended as "set once". If you need different behaviour on different occasions, please create custom decode functions. The default `Date.decoder` uses a ISO8601 date formatter. If you don't want to create your own decode closure there's a helper: + ```swift Date.decoder = Date.decoder(using: formatter) ``` ## When `Decodable` isn't enough + Don't be afraid of not conforming to `Decodable`. + ```swift let array = try NSArray.decode(json => "list").map { try Contribution(json: $0, repository: repo) @@ -171,24 +188,29 @@ let array = try NSArray.decode(json => "list").map { ``` ## Tips + - You can use `Decodable` with classes. Just make sure to either call a `required` initializer on self (e.g `self.init`) and return `Self`, or make your class `final`. ( [This](http://stackoverflow.com/questions/26495586/best-practice-to-implement-a-failable-initializer-in-swift) might be a problem though) - The `Decodable`-protocol and the `=>`-operator should in no way make you committed to use them everywhere. ## Compatibility | Swift version | Compatible tag or branch | -| --- | --- | -| Swift 4.0 | `0.6.0` | -| Swift 3.0 | `v0.5` | -| Swift 2.3 | `v0.4.4`| -| Swift 2.2 | `v0.4.3`| +| ------------- | ------------------------ | +| Swift 5.0 | `0.7.0` | +| Swift 4.0 | `0.6.0` | +| Swift 3.0 | `v0.5` | +| Swift 2.3 | `v0.4.4` | +| Swift 2.2 | `v0.4.3` | ## Note on Swift 4.0 usage + Due to collisions with the standard library you will have to import ambiguous symbols specifically, in addition to `Decodable` as a whole. This means you likely want the following + ```swift import Decodable import protocol Decodable.Decodable ``` -and you can import other symbols, e.g `KeyPath`, `DecodingError`, in a simlilar fashion (using `import struct` and `import enum`) + +and you can import other symbols, e.g `KeyPath`, `DecodingError`, in a similar fashion (using `import struct` and `import enum`) diff --git a/Sources/Info.plist b/Sources/Info.plist index d3de8ee..1623db8 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -9,7 +9,7 @@ CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion - 6.0 + 7.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType diff --git a/Tests/Info.plist b/Tests/Info.plist index ba72822..7c292c7 100644 --- a/Tests/Info.plist +++ b/Tests/Info.plist @@ -9,7 +9,7 @@ CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion - 6.0 + 7.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType From a90a1d9eca9893f90ac06e7cef1fe58085e76a8d Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 4 Nov 2019 19:19:48 -0500 Subject: [PATCH 6/6] Add docs --- docs/Enums.html | 731 + docs/Enums/DecodingError.html | 908 ++ docs/Enums/DecodingError/Metadata.html | 846 ++ docs/Extensions.html | 1246 ++ docs/Extensions/Array.html | 797 + docs/Extensions/Bool.html | 735 + docs/Extensions/Date.html | 767 + docs/Extensions/Dictionary.html | 804 + docs/Extensions/Double.html | 735 + docs/Extensions/Int.html | 735 + docs/Extensions/Int16.html | 736 + docs/Extensions/Int32.html | 736 + docs/Extensions/Int64.html | 736 + docs/Extensions/Int8.html | 736 + docs/Extensions/NSArray.html | 761 + docs/Extensions/NSDictionary.html | 735 + docs/Extensions/RawRepresentable.html | 739 + docs/Extensions/String.html | 735 + docs/Extensions/UInt16.html | 736 + docs/Extensions/UInt32.html | 736 + docs/Extensions/UInt64.html | 736 + docs/Extensions/UInt8.html | 736 + docs/Extensions/URL.html | 734 + docs/Functions.html | 12148 ++++++++++++++++ docs/Protocols.html | 825 ++ docs/Protocols/Decodable.html | 744 + docs/Protocols/DynamicDecodable.html | 773 + docs/Protocols/NSNumberCastable.html | 770 + docs/Protocols/NSValueCastable.html | 739 + docs/Structs.html | 819 ++ docs/Structs/KeyPath.html | 908 ++ docs/Structs/OptionalKey.html | 797 + docs/Structs/OptionalKeyPath.html | 866 ++ docs/badge.svg | 28 + docs/css/highlight.css | 200 + docs/css/jazzy.css | 348 + .../Decodable.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Enums.html | 731 + .../Documents/Enums/DecodingError.html | 908 ++ .../Enums/DecodingError/Metadata.html | 846 ++ .../Resources/Documents/Extensions.html | 1246 ++ .../Resources/Documents/Extensions/Array.html | 797 + .../Resources/Documents/Extensions/Bool.html | 735 + .../Resources/Documents/Extensions/Date.html | 767 + .../Documents/Extensions/Dictionary.html | 804 + .../Documents/Extensions/Double.html | 735 + .../Resources/Documents/Extensions/Int.html | 735 + .../Resources/Documents/Extensions/Int16.html | 736 + .../Resources/Documents/Extensions/Int32.html | 736 + .../Resources/Documents/Extensions/Int64.html | 736 + .../Resources/Documents/Extensions/Int8.html | 736 + .../Documents/Extensions/NSArray.html | 761 + .../Documents/Extensions/NSDictionary.html | 735 + .../Extensions/RawRepresentable.html | 739 + .../Documents/Extensions/String.html | 735 + .../Documents/Extensions/UInt16.html | 736 + .../Documents/Extensions/UInt32.html | 736 + .../Documents/Extensions/UInt64.html | 736 + .../Resources/Documents/Extensions/UInt8.html | 736 + .../Resources/Documents/Extensions/URL.html | 734 + .../Resources/Documents/Functions.html | 12148 ++++++++++++++++ .../Resources/Documents/Protocols.html | 825 ++ .../Documents/Protocols/Decodable.html | 744 + .../Documents/Protocols/DynamicDecodable.html | 773 + .../Documents/Protocols/NSNumberCastable.html | 770 + .../Documents/Protocols/NSValueCastable.html | 739 + .../Contents/Resources/Documents/Structs.html | 819 ++ .../Resources/Documents/Structs/KeyPath.html | 908 ++ .../Documents/Structs/OptionalKey.html | 797 + .../Documents/Structs/OptionalKeyPath.html | 866 ++ .../Resources/Documents/css/highlight.css | 200 + .../Resources/Documents/css/jazzy.css | 348 + .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Contents/Resources/Documents/index.html | 931 ++ .../Contents/Resources/Documents/js/jazzy.js | 59 + .../Resources/Documents/js/jquery.min.js | 2 + .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 77824 bytes docs/docsets/Decodable.tgz | Bin 0 -> 160918 bytes docs/img/carat.png | Bin 0 -> 274 bytes docs/img/dash.png | Bin 0 -> 1338 bytes docs/img/gh.png | Bin 0 -> 1571 bytes docs/index.html | 931 ++ docs/js/jazzy.js | 59 + docs/js/jquery.min.js | 2 + docs/search.json | 1 + docs/undocumented.json | 313 + 89 files changed, 78013 insertions(+) create mode 100644 docs/Enums.html create mode 100644 docs/Enums/DecodingError.html create mode 100644 docs/Enums/DecodingError/Metadata.html create mode 100644 docs/Extensions.html create mode 100644 docs/Extensions/Array.html create mode 100644 docs/Extensions/Bool.html create mode 100644 docs/Extensions/Date.html create mode 100644 docs/Extensions/Dictionary.html create mode 100644 docs/Extensions/Double.html create mode 100644 docs/Extensions/Int.html create mode 100644 docs/Extensions/Int16.html create mode 100644 docs/Extensions/Int32.html create mode 100644 docs/Extensions/Int64.html create mode 100644 docs/Extensions/Int8.html create mode 100644 docs/Extensions/NSArray.html create mode 100644 docs/Extensions/NSDictionary.html create mode 100644 docs/Extensions/RawRepresentable.html create mode 100644 docs/Extensions/String.html create mode 100644 docs/Extensions/UInt16.html create mode 100644 docs/Extensions/UInt32.html create mode 100644 docs/Extensions/UInt64.html create mode 100644 docs/Extensions/UInt8.html create mode 100644 docs/Extensions/URL.html create mode 100644 docs/Functions.html create mode 100644 docs/Protocols.html create mode 100644 docs/Protocols/Decodable.html create mode 100644 docs/Protocols/DynamicDecodable.html create mode 100644 docs/Protocols/NSNumberCastable.html create mode 100644 docs/Protocols/NSValueCastable.html create mode 100644 docs/Structs.html create mode 100644 docs/Structs/KeyPath.html create mode 100644 docs/Structs/OptionalKey.html create mode 100644 docs/Structs/OptionalKeyPath.html create mode 100644 docs/badge.svg create mode 100644 docs/css/highlight.css create mode 100644 docs/css/jazzy.css create mode 100644 docs/docsets/Decodable.docset/Contents/Info.plist create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError/Metadata.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Array.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Bool.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Date.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Dictionary.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Double.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int16.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int32.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int64.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int8.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSArray.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSDictionary.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/RawRepresentable.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/String.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt16.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt32.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt64.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt8.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/URL.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Functions.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/Decodable.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/DynamicDecodable.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSNumberCastable.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSValueCastable.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/KeyPath.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKey.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKeyPath.html create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docs/docsets/Decodable.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docs/docsets/Decodable.docset/Contents/Resources/Documents/img/dash.png create mode 100755 docs/docsets/Decodable.docset/Contents/Resources/Documents/img/gh.png create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/index.html create mode 100755 docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/Documents/search.json create mode 100644 docs/docsets/Decodable.docset/Contents/Resources/docSet.dsidx create mode 100644 docs/docsets/Decodable.tgz create mode 100755 docs/img/carat.png create mode 100755 docs/img/dash.png create mode 100755 docs/img/gh.png create mode 100644 docs/index.html create mode 100755 docs/js/jazzy.js create mode 100644 docs/js/jquery.min.js create mode 100644 docs/search.json create mode 100644 docs/undocumented.json diff --git a/docs/Enums.html b/docs/Enums.html new file mode 100644 index 0000000..e974d81 --- /dev/null +++ b/docs/Enums.html @@ -0,0 +1,731 @@ + + + + Enumerations Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • +
    + + + + DecodingError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum DecodingError : Error, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Enums/DecodingError.html b/docs/Enums/DecodingError.html new file mode 100644 index 0000000..066dc10 --- /dev/null +++ b/docs/Enums/DecodingError.html @@ -0,0 +1,908 @@ + + + + DecodingError Enumeration Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

DecodingError

+
+
+
public enum DecodingError : Error, Equatable
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + Metadata + +
    +
    +
    +
    +
    +
    +

    DecodingError.Metadata provides information about +where an DecodingError was thrown in the JSON +object graph.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Metadata : Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Thrown when optional casting from Any fails.

    + +

    This can happen both when trying to access a key on a object +that isn’t a NSDictionary, and failing to cast a Castable +primitive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case typeMismatch(expected: Any.Type, actual: Any.Type, Metadata)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + missingKey(_:_:) + +
    +
    +
    +
    +
    +
    +

    Thrown when a given, required, key was not found in a dictionary.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case missingKey(String, Metadata)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Thrown from the RawRepresentable extension when +init(rawValue:) returned nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rawRepresentableInitializationError(rawValue: Any, Metadata)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + other(_:_:) + +
    +
    +
    +
    +
    +
    +

    When an error is thrown that isn’t DecodingError, it +will be wrapped in DecodingError.other in order to also provide +metadata about where the error was thrown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other(Error, Metadata)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + metadata + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var metadata: Metadata { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + debugDescription + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var debugDescription: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Enums/DecodingError/Metadata.html b/docs/Enums/DecodingError/Metadata.html new file mode 100644 index 0000000..7eee7b0 --- /dev/null +++ b/docs/Enums/DecodingError/Metadata.html @@ -0,0 +1,846 @@ + + + + Metadata Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Metadata

+
+
+
public struct Metadata : Equatable
+ +
+
+

DecodingError.Metadata provides information about +where an DecodingError was thrown in the JSON +object graph.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(path: [String] = [], object: Any, rootObject: Any? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + path + +
    +
    +
    +
    +
    +
    +

    The JSON key path to the object that failed to be decoded

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var path: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The JSON object that failed to be decoded

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: Any
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + rootObject + +
    +
    +
    +
    +
    +
    +

    The root JSON object for which the path can be used to find object

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var rootObject: Any?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + formattedPath + +
    +
    +
    +
    +
    +
    +

    Represents the path to the object that failed decoding with . as a separator.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var formattedPath: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions.html b/docs/Extensions.html new file mode 100644 index 0000000..19545c3 --- /dev/null +++ b/docs/Extensions.html @@ -0,0 +1,1246 @@ + + + + Extensions Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+ +
+
+
    +
  • +
    + + + + Dictionary + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @frozen
    +extension Dictionary where Key: Decodable, Value: Decodable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Array + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @frozen
    +extension Array where Element: Decodable
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + RawRepresentable + +
    +
    +
    +
    +
    +
    +

    Extends all RawRepresentables (enums) which are also Decodable with decode implementation.

    + +

    I could not find a way to implicitly declare RawRepresentable conforming to Decodable, what would make all enums Decodable automatically. + Because of that for an enum to be compatible with Decodable operators it must be declared as implementing Decodable protocol.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension RawRepresentable where RawValue: Decodable, Self: Decodable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Array.html b/docs/Extensions/Array.html new file mode 100644 index 0000000..fe3dc5b --- /dev/null +++ b/docs/Extensions/Array.html @@ -0,0 +1,797 @@ + + + + Array Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Array

+
+
+
@frozen
+extension Array where Element: Decodable
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ j: Any, ignoreInvalidObjects: Bool = false) throws -> [Element]
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + decoder(_:) + +
    +
    +
    +
    +
    +
    +

    Creates an array decoder from an element decoder

    + +

    This function is used by => and =>? overloads when decoding [T]

    +
    +

    Throws

    + if NSArray.decode throws or any element decode closure throws + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decoder(_ elementDecoder: @escaping (Any) throws -> Element) -> (Any) throws -> Array<Element>
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + elementDecoder + + +
    +

    A decoder (decode closure) for the Element type

    +
    +
    +
    +
    +

    Return Value

    +

    A closure that takes an NSArray and maps it using the element decode closure

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Bool.html b/docs/Extensions/Bool.html new file mode 100644 index 0000000..9d92e0d --- /dev/null +++ b/docs/Extensions/Bool.html @@ -0,0 +1,735 @@ + + + + Bool Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/Date.html b/docs/Extensions/Date.html new file mode 100644 index 0000000..32c4c90 --- /dev/null +++ b/docs/Extensions/Date.html @@ -0,0 +1,767 @@ + + + + Date Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Date

+
+
+
extension Date: Decodable, DynamicDecodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decoder + +
    +
    +
    +
    +
    +
    +

    Default decoder is Date.decoder(using: iso8601DateFormatter)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var decoder: (Any) throws -> Date
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decoder(using:) + +
    +
    +
    +
    +
    +
    +

    Create a decode closure using a given formatter

    + +

    Example usage:

    +
    let formatter = DateFormatter(...)
    +Date.decoder = Date.decoder(using: formatter)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decoder(using formatter: DateFormatter) -> (Any) throws -> Date
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Dictionary.html b/docs/Extensions/Dictionary.html new file mode 100644 index 0000000..ecd04d4 --- /dev/null +++ b/docs/Extensions/Dictionary.html @@ -0,0 +1,804 @@ + + + + Dictionary Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Dictionary

+
+
+
@frozen
+extension Dictionary where Key: Decodable, Value: Decodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ j: Any) throws -> Dictionary
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + decoder(key:value:) + +
    +
    +
    +
    +
    +
    +

    Create a dictionary decoder from key- and value- decoders

    + +

    This function is used by => and =>? overloads when decoding [K: V]

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decoder(key keyDecoder: @escaping (Any) throws -> Key, value valueDecoder: @escaping (Any) throws -> Value) -> (Any) throws -> Dictionary
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + key + + +
    +

    A decoder (decode closure) for the Key type

    +
    +
    + + value + + +
    +

    A decoder (decode closure) for the Value type

    +
    +
    +
    +
    +

    Return Value

    +

    A closure that takes a NSDictionary and maps it using key and value decode closures

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Double.html b/docs/Extensions/Double.html new file mode 100644 index 0000000..4bdad88 --- /dev/null +++ b/docs/Extensions/Double.html @@ -0,0 +1,735 @@ + + + + Double Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/Int.html b/docs/Extensions/Int.html new file mode 100644 index 0000000..138ff29 --- /dev/null +++ b/docs/Extensions/Int.html @@ -0,0 +1,735 @@ + + + + Int Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/Int16.html b/docs/Extensions/Int16.html new file mode 100644 index 0000000..ef30e0d --- /dev/null +++ b/docs/Extensions/Int16.html @@ -0,0 +1,736 @@ + + + + Int16 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/Int32.html b/docs/Extensions/Int32.html new file mode 100644 index 0000000..e3f5bd1 --- /dev/null +++ b/docs/Extensions/Int32.html @@ -0,0 +1,736 @@ + + + + Int32 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/Int64.html b/docs/Extensions/Int64.html new file mode 100644 index 0000000..4749a26 --- /dev/null +++ b/docs/Extensions/Int64.html @@ -0,0 +1,736 @@ + + + + Int64 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/Int8.html b/docs/Extensions/Int8.html new file mode 100644 index 0000000..7edeff1 --- /dev/null +++ b/docs/Extensions/Int8.html @@ -0,0 +1,736 @@ + + + + Int8 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/NSArray.html b/docs/Extensions/NSArray.html new file mode 100644 index 0000000..ac8aae4 --- /dev/null +++ b/docs/Extensions/NSArray.html @@ -0,0 +1,761 @@ + + + + NSArray Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSArray

+
+
+
extension NSArray: DynamicDecodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decoder + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var decoder: (Any) throws -> NSArray
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ json: Any) throws -> NSArray
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/NSDictionary.html b/docs/Extensions/NSDictionary.html new file mode 100644 index 0000000..3a234f8 --- /dev/null +++ b/docs/Extensions/NSDictionary.html @@ -0,0 +1,735 @@ + + + + NSDictionary Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSDictionary

+
+
+
extension NSDictionary: Decodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/RawRepresentable.html b/docs/Extensions/RawRepresentable.html new file mode 100644 index 0000000..8991b5f --- /dev/null +++ b/docs/Extensions/RawRepresentable.html @@ -0,0 +1,739 @@ + + + + RawRepresentable Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

RawRepresentable

+
+
+
public extension RawRepresentable where RawValue: Decodable, Self: Decodable
+ +
+
+

Extends all RawRepresentables (enums) which are also Decodable with decode implementation.

+ +

I could not find a way to implicitly declare RawRepresentable conforming to Decodable, what would make all enums Decodable automatically. + Because of that for an enum to be compatible with Decodable operators it must be declared as implementing Decodable protocol.

+ +
+
+
+
    +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/String.html b/docs/Extensions/String.html new file mode 100644 index 0000000..e6cd510 --- /dev/null +++ b/docs/Extensions/String.html @@ -0,0 +1,735 @@ + + + + String Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/UInt16.html b/docs/Extensions/UInt16.html new file mode 100644 index 0000000..b2d73be --- /dev/null +++ b/docs/Extensions/UInt16.html @@ -0,0 +1,736 @@ + + + + UInt16 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/UInt32.html b/docs/Extensions/UInt32.html new file mode 100644 index 0000000..99dd52d --- /dev/null +++ b/docs/Extensions/UInt32.html @@ -0,0 +1,736 @@ + + + + UInt32 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/UInt64.html b/docs/Extensions/UInt64.html new file mode 100644 index 0000000..e90e707 --- /dev/null +++ b/docs/Extensions/UInt64.html @@ -0,0 +1,736 @@ + + + + UInt64 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/UInt8.html b/docs/Extensions/UInt8.html new file mode 100644 index 0000000..d6ba005 --- /dev/null +++ b/docs/Extensions/UInt8.html @@ -0,0 +1,736 @@ + + + + UInt8 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Extensions/URL.html b/docs/Extensions/URL.html new file mode 100644 index 0000000..9c620de --- /dev/null +++ b/docs/Extensions/URL.html @@ -0,0 +1,734 @@ + + + + URL Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/Functions.html b/docs/Functions.html new file mode 100644 index 0000000..e477fe7 --- /dev/null +++ b/docs/Functions.html @@ -0,0 +1,12148 @@ + + + + Functions Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Functions

+

The following functions are available globally.

+ +
+
+
+
    +
  • +
    + + + + cast(_:) + +
    +
    +
    +
    +
    +
    +

    Attempt to cast an Any to T or throw

    +
    +

    Throws

    + DecodingError.typeMismatch(expected, actual, metadata) + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func cast<T>(_ object: Any) throws -> T
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func decodeAsOneOf(_ json: Any, objectTypes: Decodable.Type...) throws -> Decodable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func decodeArrayAsOneOf(_ json: Any, objectTypes: Decodable.Type...) throws -> [Decodable]
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ~=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func ~= <T>(lhs: T.Type, rhs: Any.Type) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: DecodingError.Metadata, rhs: DecodingError.Metadata) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: DecodingError, rhs: DecodingError) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: KeyPath, rhs: KeyPath) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => (lhs: Any, rhs: KeyPath) throws -> Any
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? (lhs: Any, rhs: OptionalKeyPath) throws -> Any?
    + +
    +
    +
    +
    +
  • +
+
+
+ + +
+
+ +
    +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: OptionalKey, rhs: OptionalKey) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A?]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> A? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A?]?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]]?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B?]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]?]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A?]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A?]]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[[A]]]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[[A : B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B?]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : [B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[[A : [B : C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B?]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [[B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [[B : C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : [C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [[A : [B : [C : D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B?]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C?]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B?]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[[B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[[B : C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : [C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [[B : [C : D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [[C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [[C : D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : [D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D, E>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : [D : E]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable, D : Hashable, E : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> A where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A?]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A]]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B]]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B?]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B]]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [A?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A]?]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B]?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A?]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A?]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[[A]]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[[A : B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B?]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : [B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : [B : C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B]?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B?]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [[B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [[B : C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : [C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : [C : D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [A]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B?]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B]]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C?]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : B?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B]?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B?]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[[B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[[B : C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : [C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : [C : D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [[C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [[C : D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : [D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D, E>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : [D : E]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable, D : Hashable, E : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : B]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> A? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func parse<T>(_ json: Any, keyPath: KeyPath, decoder: ((Any) throws -> T)) throws -> T
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func parse<T>(_ json: Any, keyPath: OptionalKeyPath, decoder: ((Any) throws -> T?)) throws -> T?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols.html b/docs/Protocols.html new file mode 100644 index 0000000..ef87086 --- /dev/null +++ b/docs/Protocols.html @@ -0,0 +1,825 @@ + + + + Protocols Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+
+
    +
  • +
    + + + + DynamicDecodable + +
    +
    +
    +
    +
    +
    +

    Allows overriding default decode function from your app.

    + +

    You likely don’t want to conform to this yourself.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol DynamicDecodable
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + Decodable + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Decodable
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + NSValueCastable + +
    +
    +
    +
    +
    +
    +

    Provides a default implementation of decode() which casts the object to a NSValue and unsafely casts its value as Self.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol NSValueCastable : Decodable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + NSNumberCastable + +
    +
    +
    +
    +
    +
    +

    Used to enable decoding to different IntegerTypes from NSNumber.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol NSNumberCastable : NSValueCastable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols/Decodable.html b/docs/Protocols/Decodable.html new file mode 100644 index 0000000..a365334 --- /dev/null +++ b/docs/Protocols/Decodable.html @@ -0,0 +1,744 @@ + + + + Decodable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Decodable

+
+
+
public protocol Decodable
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + decode(_:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols/DynamicDecodable.html b/docs/Protocols/DynamicDecodable.html new file mode 100644 index 0000000..cc163a7 --- /dev/null +++ b/docs/Protocols/DynamicDecodable.html @@ -0,0 +1,773 @@ + + + + DynamicDecodable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

DynamicDecodable

+
+
+
public protocol DynamicDecodable
+ +
+
+

Allows overriding default decode function from your app.

+ +

You likely don’t want to conform to this yourself.

+ +
+
+
+
    +
  • +
    + + + + DecodedType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype DecodedType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decoder + +
    +
    +
    +
    +
    +
    +

    A closure describing how this type should be decoded

    + +

    Types also conforming to Decodable call this closure +from their decode function.

    +
    +

    Note

    + This is intended as a set-once thing. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var decoder: (Any) throws -> DecodedType { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols/NSNumberCastable.html b/docs/Protocols/NSNumberCastable.html new file mode 100644 index 0000000..5bf5df6 --- /dev/null +++ b/docs/Protocols/NSNumberCastable.html @@ -0,0 +1,770 @@ + + + + NSNumberCastable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSNumberCastable

+
+
+
public protocol NSNumberCastable : NSValueCastable
+ +
+
+

Used to enable decoding to different IntegerTypes from NSNumber.

+ +
+
+
+
    +
  • +
    + + + + convertFrom(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func convertFrom(_ n: NSNumber) -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + decode(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols/NSValueCastable.html b/docs/Protocols/NSValueCastable.html new file mode 100644 index 0000000..4990375 --- /dev/null +++ b/docs/Protocols/NSValueCastable.html @@ -0,0 +1,739 @@ + + + + NSValueCastable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSValueCastable

+
+
+
public protocol NSValueCastable : Decodable
+ +
+
+

Provides a default implementation of decode() which casts the object to a NSValue and unsafely casts its value as Self.

+ +
+
+
+
    +
  • +
    + + + + decode(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ j: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs.html b/docs/Structs.html new file mode 100644 index 0000000..3f02664 --- /dev/null +++ b/docs/Structs.html @@ -0,0 +1,819 @@ + + + + Structures Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Structures

+

The following structures are available globally.

+ +
+
+
+
    +
  • +
    + + + + KeyPath + +
    +
    +
    +
    +
    +
    +

    KeyPath represents the path to a specific node in a tree of nested dictionaries.

    + +

    Can be created from string and array literals and can be joined by the => operator.

    +
    let a: KeyPath = "a"
    +let b: KeyPath = ["a", "b"]
    +let c: KeyPath = "a" => "b" => "c"
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct KeyPath
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + OptionalKey + +
    +
    +
    +
    +
    +
    +

    A key in a keyPath that may or may not be required.

    + +

    Trying to access a invalid key in a dictionary with an OptionalKey will usually result +in a nil return value instead of a thrown error. Unless isRequired is true, in which +it behaves as a normal String inside a normal KeyPath.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct OptionalKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + OptionalKeyPath + +
    +
    +
    +
    +
    +
    +

    OptionalKeyPath represents the path to a specific node in a tree of nested dictionaries.

    + +

    Can be created from string and array literals and can be joined by the =>? operator.

    +
     let a: OptionalKeyPath = "a"
    + let b: OptionalKeyPath = ["a", "b"]
    + let c: OptionalKeyPath = "a" =>? "b" =>? "c"
    +
    + +

    Unlike KeyPath, OptionalKeyPath allows each key to be either required or optional. +isRequired is false by default.

    + +

    When a KeyPath is converted to a OptionalKeyPath, isRequired is set to true.

    +
     let c: OptionalKeyPath = "a" =>? "b" => "c"
    +                                         ^^
    +                             isRequired=true
    +
    + +

    In the above example "c" is inferred as KeyPath, then converted to OptionalKeyPath + with isRequired = true

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct OptionalKeyPath
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/KeyPath.html b/docs/Structs/KeyPath.html new file mode 100644 index 0000000..65aade7 --- /dev/null +++ b/docs/Structs/KeyPath.html @@ -0,0 +1,908 @@ + + + + KeyPath Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

KeyPath

+
+
+
public struct KeyPath
+ +
+
+

KeyPath represents the path to a specific node in a tree of nested dictionaries.

+ +

Can be created from string and array literals and can be joined by the => operator.

+
let a: KeyPath = "a"
+let b: KeyPath = ["a", "b"]
+let c: KeyPath = "a" => "b" => "c"
+
+ +
+
+
+
    +
  • +
    + + + + keys + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keys: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ keys: [String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ key: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(stringLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(extendedGraphemeClusterLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(unicodeScalarLiteral value: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(arrayLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(arrayLiteral elements: String...)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/OptionalKey.html b/docs/Structs/OptionalKey.html new file mode 100644 index 0000000..5e8a4b7 --- /dev/null +++ b/docs/Structs/OptionalKey.html @@ -0,0 +1,797 @@ + + + + OptionalKey Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

OptionalKey

+
+
+
public struct OptionalKey
+ +
+
+

A key in a keyPath that may or may not be required.

+ +

Trying to access a invalid key in a dictionary with an OptionalKey will usually result +in a nil return value instead of a thrown error. Unless isRequired is true, in which +it behaves as a normal String inside a normal KeyPath.

+ +
+
+
+
    +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isRequired + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isRequired: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/OptionalKeyPath.html b/docs/Structs/OptionalKeyPath.html new file mode 100644 index 0000000..4d363b8 --- /dev/null +++ b/docs/Structs/OptionalKeyPath.html @@ -0,0 +1,866 @@ + + + + OptionalKeyPath Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

OptionalKeyPath

+
+
+
public struct OptionalKeyPath
+ +
+
+

OptionalKeyPath represents the path to a specific node in a tree of nested dictionaries.

+ +

Can be created from string and array literals and can be joined by the =>? operator.

+
 let a: OptionalKeyPath = "a"
+ let b: OptionalKeyPath = ["a", "b"]
+ let c: OptionalKeyPath = "a" =>? "b" =>? "c"
+
+ +

Unlike KeyPath, OptionalKeyPath allows each key to be either required or optional. +isRequired is false by default.

+ +

When a KeyPath is converted to a OptionalKeyPath, isRequired is set to true.

+
 let c: OptionalKeyPath = "a" =>? "b" => "c"
+                                         ^^
+                             isRequired=true
+
+ +

In the above example "c" is inferred as KeyPath, then converted to OptionalKeyPath + with isRequired = true

+ +
+
+
+
    +
  • +
    + + + + keys + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keys: [OptionalKey]
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(stringLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(extendedGraphemeClusterLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(unicodeScalarLiteral value: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(arrayLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(arrayLiteral elements: String...)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 0000000..d799a27 --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 83% + + + 83% + + + diff --git a/docs/css/highlight.css b/docs/css/highlight.css new file mode 100644 index 0000000..d0db0e1 --- /dev/null +++ b/docs/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css new file mode 100644 index 0000000..103ee29 --- /dev/null +++ b/docs/css/jazzy.css @@ -0,0 +1,348 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 1; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 1; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 0px; } + .item .discouraged { + text-decoration: line-through; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } diff --git a/docs/docsets/Decodable.docset/Contents/Info.plist b/docs/docsets/Decodable.docset/Contents/Info.plist new file mode 100644 index 0000000..891eab1 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.decodable + CFBundleName + Decodable + DocSetPlatformFamily + decodable + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 0000000..e974d81 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,731 @@ + + + + Enumerations Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • +
    + + + + DecodingError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum DecodingError : Error, Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError.html new file mode 100644 index 0000000..066dc10 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError.html @@ -0,0 +1,908 @@ + + + + DecodingError Enumeration Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

DecodingError

+
+
+
public enum DecodingError : Error, Equatable
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + Metadata + +
    +
    +
    +
    +
    +
    +

    DecodingError.Metadata provides information about +where an DecodingError was thrown in the JSON +object graph.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Metadata : Equatable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Thrown when optional casting from Any fails.

    + +

    This can happen both when trying to access a key on a object +that isn’t a NSDictionary, and failing to cast a Castable +primitive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case typeMismatch(expected: Any.Type, actual: Any.Type, Metadata)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + missingKey(_:_:) + +
    +
    +
    +
    +
    +
    +

    Thrown when a given, required, key was not found in a dictionary.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case missingKey(String, Metadata)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Thrown from the RawRepresentable extension when +init(rawValue:) returned nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rawRepresentableInitializationError(rawValue: Any, Metadata)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + other(_:_:) + +
    +
    +
    +
    +
    +
    +

    When an error is thrown that isn’t DecodingError, it +will be wrapped in DecodingError.other in order to also provide +metadata about where the error was thrown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other(Error, Metadata)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + metadata + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var metadata: Metadata { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + debugDescription + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var debugDescription: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError/Metadata.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError/Metadata.html new file mode 100644 index 0000000..7eee7b0 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Enums/DecodingError/Metadata.html @@ -0,0 +1,846 @@ + + + + Metadata Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Metadata

+
+
+
public struct Metadata : Equatable
+ +
+
+

DecodingError.Metadata provides information about +where an DecodingError was thrown in the JSON +object graph.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(path: [String] = [], object: Any, rootObject: Any? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + path + +
    +
    +
    +
    +
    +
    +

    The JSON key path to the object that failed to be decoded

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var path: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + object + +
    +
    +
    +
    +
    +
    +

    The JSON object that failed to be decoded

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let object: Any
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + rootObject + +
    +
    +
    +
    +
    +
    +

    The root JSON object for which the path can be used to find object

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var rootObject: Any?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + formattedPath + +
    +
    +
    +
    +
    +
    +

    Represents the path to the object that failed decoding with . as a separator.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var formattedPath: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 0000000..19545c3 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,1246 @@ + + + + Extensions Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+ +
+
+
    +
  • +
    + + + + Dictionary + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @frozen
    +extension Dictionary where Key: Decodable, Value: Decodable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Array + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @frozen
    +extension Array where Element: Decodable
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + RawRepresentable + +
    +
    +
    +
    +
    +
    +

    Extends all RawRepresentables (enums) which are also Decodable with decode implementation.

    + +

    I could not find a way to implicitly declare RawRepresentable conforming to Decodable, what would make all enums Decodable automatically. + Because of that for an enum to be compatible with Decodable operators it must be declared as implementing Decodable protocol.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension RawRepresentable where RawValue: Decodable, Self: Decodable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Array.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Array.html new file mode 100644 index 0000000..fe3dc5b --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Array.html @@ -0,0 +1,797 @@ + + + + Array Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Array

+
+
+
@frozen
+extension Array where Element: Decodable
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ j: Any, ignoreInvalidObjects: Bool = false) throws -> [Element]
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + decoder(_:) + +
    +
    +
    +
    +
    +
    +

    Creates an array decoder from an element decoder

    + +

    This function is used by => and =>? overloads when decoding [T]

    +
    +

    Throws

    + if NSArray.decode throws or any element decode closure throws + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decoder(_ elementDecoder: @escaping (Any) throws -> Element) -> (Any) throws -> Array<Element>
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + elementDecoder + + +
    +

    A decoder (decode closure) for the Element type

    +
    +
    +
    +
    +

    Return Value

    +

    A closure that takes an NSArray and maps it using the element decode closure

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Bool.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Bool.html new file mode 100644 index 0000000..9d92e0d --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Bool.html @@ -0,0 +1,735 @@ + + + + Bool Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Date.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Date.html new file mode 100644 index 0000000..32c4c90 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Date.html @@ -0,0 +1,767 @@ + + + + Date Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Date

+
+
+
extension Date: Decodable, DynamicDecodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decoder + +
    +
    +
    +
    +
    +
    +

    Default decoder is Date.decoder(using: iso8601DateFormatter)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var decoder: (Any) throws -> Date
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decoder(using:) + +
    +
    +
    +
    +
    +
    +

    Create a decode closure using a given formatter

    + +

    Example usage:

    +
    let formatter = DateFormatter(...)
    +Date.decoder = Date.decoder(using: formatter)
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decoder(using formatter: DateFormatter) -> (Any) throws -> Date
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Dictionary.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Dictionary.html new file mode 100644 index 0000000..ecd04d4 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Dictionary.html @@ -0,0 +1,804 @@ + + + + Dictionary Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Dictionary

+
+
+
@frozen
+extension Dictionary where Key: Decodable, Value: Decodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ j: Any) throws -> Dictionary
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + decoder(key:value:) + +
    +
    +
    +
    +
    +
    +

    Create a dictionary decoder from key- and value- decoders

    + +

    This function is used by => and =>? overloads when decoding [K: V]

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decoder(key keyDecoder: @escaping (Any) throws -> Key, value valueDecoder: @escaping (Any) throws -> Value) -> (Any) throws -> Dictionary
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + key + + +
    +

    A decoder (decode closure) for the Key type

    +
    +
    + + value + + +
    +

    A decoder (decode closure) for the Value type

    +
    +
    +
    +
    +

    Return Value

    +

    A closure that takes a NSDictionary and maps it using key and value decode closures

    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Double.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Double.html new file mode 100644 index 0000000..4bdad88 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Double.html @@ -0,0 +1,735 @@ + + + + Double Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int.html new file mode 100644 index 0000000..138ff29 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int.html @@ -0,0 +1,735 @@ + + + + Int Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int16.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int16.html new file mode 100644 index 0000000..ef30e0d --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int16.html @@ -0,0 +1,736 @@ + + + + Int16 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int32.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int32.html new file mode 100644 index 0000000..e3f5bd1 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int32.html @@ -0,0 +1,736 @@ + + + + Int32 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int64.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int64.html new file mode 100644 index 0000000..4749a26 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int64.html @@ -0,0 +1,736 @@ + + + + Int64 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int8.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int8.html new file mode 100644 index 0000000..7edeff1 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/Int8.html @@ -0,0 +1,736 @@ + + + + Int8 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSArray.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSArray.html new file mode 100644 index 0000000..ac8aae4 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSArray.html @@ -0,0 +1,761 @@ + + + + NSArray Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSArray

+
+
+
extension NSArray: DynamicDecodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decoder + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var decoder: (Any) throws -> NSArray
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ json: Any) throws -> NSArray
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSDictionary.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSDictionary.html new file mode 100644 index 0000000..3a234f8 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/NSDictionary.html @@ -0,0 +1,735 @@ + + + + NSDictionary Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSDictionary

+
+
+
extension NSDictionary: Decodable
+ +
+
+ +
+
+
+
    +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/RawRepresentable.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/RawRepresentable.html new file mode 100644 index 0000000..8991b5f --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/RawRepresentable.html @@ -0,0 +1,739 @@ + + + + RawRepresentable Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

RawRepresentable

+
+
+
public extension RawRepresentable where RawValue: Decodable, Self: Decodable
+ +
+
+

Extends all RawRepresentables (enums) which are also Decodable with decode implementation.

+ +

I could not find a way to implicitly declare RawRepresentable conforming to Decodable, what would make all enums Decodable automatically. + Because of that for an enum to be compatible with Decodable operators it must be declared as implementing Decodable protocol.

+ +
+
+
+
    +
  • +
    + + + + decode(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/String.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/String.html new file mode 100644 index 0000000..e6cd510 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/String.html @@ -0,0 +1,735 @@ + + + + String Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt16.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt16.html new file mode 100644 index 0000000..b2d73be --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt16.html @@ -0,0 +1,736 @@ + + + + UInt16 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt32.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt32.html new file mode 100644 index 0000000..99dd52d --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt32.html @@ -0,0 +1,736 @@ + + + + UInt32 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt64.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt64.html new file mode 100644 index 0000000..e90e707 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt64.html @@ -0,0 +1,736 @@ + + + + UInt64 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt8.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt8.html new file mode 100644 index 0000000..d6ba005 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/UInt8.html @@ -0,0 +1,736 @@ + + + + UInt8 Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/URL.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/URL.html new file mode 100644 index 0000000..9c620de --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Extensions/URL.html @@ -0,0 +1,734 @@ + + + + URL Extension Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ + +
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Functions.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Functions.html new file mode 100644 index 0000000..e477fe7 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Functions.html @@ -0,0 +1,12148 @@ + + + + Functions Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Functions

+

The following functions are available globally.

+ +
+
+
+
    +
  • +
    + + + + cast(_:) + +
    +
    +
    +
    +
    +
    +

    Attempt to cast an Any to T or throw

    +
    +

    Throws

    + DecodingError.typeMismatch(expected, actual, metadata) + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func cast<T>(_ object: Any) throws -> T
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func decodeAsOneOf(_ json: Any, objectTypes: Decodable.Type...) throws -> Decodable
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func decodeArrayAsOneOf(_ json: Any, objectTypes: Decodable.Type...) throws -> [Decodable]
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ~=(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func ~= <T>(lhs: T.Type, rhs: Any.Type) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: DecodingError.Metadata, rhs: DecodingError.Metadata) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: DecodingError, rhs: DecodingError) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: KeyPath, rhs: KeyPath) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => (lhs: Any, rhs: KeyPath) throws -> Any
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? (lhs: Any, rhs: OptionalKeyPath) throws -> Any?
    + +
    +
    +
    +
    +
  • +
+
+
+ + +
+
+ +
    +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func == (lhs: OptionalKey, rhs: OptionalKey) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A?]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError if a key is missing or decoding fails. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> A? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A?]?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]]?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B?]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A?] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]?]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A?]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A?]]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[[A]]]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[[A : B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[[A]]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B?]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : [B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[[A : [B : C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[[A : B]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [[A]] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B?]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [[B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [[B : C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : [B]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : [C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [[A : [B : [C : D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [[A : [B : C]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [[A : B]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> [A] where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B?]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C?]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]?] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B?] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B?]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B?]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[[B]]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[[B : C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [[B]]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : [C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [[B : [C : D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [[B : C]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : [B]] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C?]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [[C]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [[C : D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D?]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : [D]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D, E>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : [D : E]]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable, D : Hashable, E : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C, D>(json: Any, keyPath: KeyPath) throws -> [A : [B : [C : D]]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B, C>(json: Any, keyPath: KeyPath) throws -> [A : [B : C]] where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A, B>(json: Any, keyPath: KeyPath) throws -> [A : B] where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatchError,.other(error, metadata) or possible .missingKeyError on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func => <A>(json: Any, keyPath: KeyPath) throws -> A where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    something

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A?]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A]]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B]]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A]?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B?]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B]]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [A?]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A]?]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B]?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A?]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A?]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[[A]]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[[A : B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A]]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B?]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : [B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : [B : C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[[A : B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [[A]]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B]?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B?]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [[B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [[B : C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : [C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : [C : D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : [B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [[A : B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> [A]? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B?]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B]]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B]?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C?]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D]]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C]?]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : B?]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B]?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B?]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B?]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[[B]]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[[B : C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B]]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : [C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : [C : D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [[B : C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B]]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D]?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C?]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [[C]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [[C : D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D?]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : [D]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D, E>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : [D : E]]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable, D : Hashable, E : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C, D>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : [C : D]]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable, C : Hashable, D : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B, C>(json: Any, keyPath: OptionalKeyPath) throws -> [A : [B : C]]? where A : Decodable, A : Hashable, B : Decodable, B : Hashable, C : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A, B>(json: Any, keyPath: OptionalKeyPath) throws -> [A : B]? where A : Decodable, A : Hashable, B : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
  • +
    + + + + =>?(_:_:) + +
    +
    +
    +
    +
    +
    +

    Retrieves the object at path from json and decodes it according to the return type

    +
    +

    Throws

    + DecodingError.typeMismatch,.other(error, metadata)or possible.missingKeyError` on required keys + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func =>? <A>(json: Any, keyPath: OptionalKeyPath) throws -> A? where A : Decodable
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + json + + +
    +

    An object from NSJSONSerialization, preferably a NSDictionary.

    +
    +
    + + path + + +
    +

    KeyPath– can be appended using with => or =>?

    +
    +
    +
    +
    +

    Return Value

    +

    nil if the object at path is NSNull or if any optional key is missing.

    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func parse<T>(_ json: Any, keyPath: KeyPath, decoder: ((Any) throws -> T)) throws -> T
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func parse<T>(_ json: Any, keyPath: OptionalKeyPath, decoder: ((Any) throws -> T?)) throws -> T?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 0000000..ef87086 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,825 @@ + + + + Protocols Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+
+
    +
  • +
    + + + + DynamicDecodable + +
    +
    +
    +
    +
    +
    +

    Allows overriding default decode function from your app.

    + +

    You likely don’t want to conform to this yourself.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol DynamicDecodable
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + Decodable + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Decodable
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + NSValueCastable + +
    +
    +
    +
    +
    +
    +

    Provides a default implementation of decode() which casts the object to a NSValue and unsafely casts its value as Self.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol NSValueCastable : Decodable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + NSNumberCastable + +
    +
    +
    +
    +
    +
    +

    Used to enable decoding to different IntegerTypes from NSNumber.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol NSNumberCastable : NSValueCastable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/Decodable.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/Decodable.html new file mode 100644 index 0000000..a365334 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/Decodable.html @@ -0,0 +1,744 @@ + + + + Decodable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Decodable

+
+
+
public protocol Decodable
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + decode(_:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/DynamicDecodable.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/DynamicDecodable.html new file mode 100644 index 0000000..cc163a7 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/DynamicDecodable.html @@ -0,0 +1,773 @@ + + + + DynamicDecodable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

DynamicDecodable

+
+
+
public protocol DynamicDecodable
+ +
+
+

Allows overriding default decode function from your app.

+ +

You likely don’t want to conform to this yourself.

+ +
+
+
+
    +
  • +
    + + + + DecodedType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype DecodedType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + decoder + +
    +
    +
    +
    +
    +
    +

    A closure describing how this type should be decoded

    + +

    Types also conforming to Decodable call this closure +from their decode function.

    +
    +

    Note

    + This is intended as a set-once thing. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var decoder: (Any) throws -> DecodedType { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSNumberCastable.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSNumberCastable.html new file mode 100644 index 0000000..5bf5df6 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSNumberCastable.html @@ -0,0 +1,770 @@ + + + + NSNumberCastable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSNumberCastable

+
+
+
public protocol NSNumberCastable : NSValueCastable
+ +
+
+

Used to enable decoding to different IntegerTypes from NSNumber.

+ +
+
+
+
    +
  • +
    + + + + convertFrom(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func convertFrom(_ n: NSNumber) -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + decode(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ json: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSValueCastable.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSValueCastable.html new file mode 100644 index 0000000..4990375 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Protocols/NSValueCastable.html @@ -0,0 +1,739 @@ + + + + NSValueCastable Protocol Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

NSValueCastable

+
+
+
public protocol NSValueCastable : Decodable
+ +
+
+

Provides a default implementation of decode() which casts the object to a NSValue and unsafely casts its value as Self.

+ +
+
+
+
    +
  • +
    + + + + decode(_:) + + + Extension method + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decode(_ j: Any) throws -> Self
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 0000000..3f02664 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,819 @@ + + + + Structures Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

Structures

+

The following structures are available globally.

+ +
+
+
+
    +
  • +
    + + + + KeyPath + +
    +
    +
    +
    +
    +
    +

    KeyPath represents the path to a specific node in a tree of nested dictionaries.

    + +

    Can be created from string and array literals and can be joined by the => operator.

    +
    let a: KeyPath = "a"
    +let b: KeyPath = ["a", "b"]
    +let c: KeyPath = "a" => "b" => "c"
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct KeyPath
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + OptionalKey + +
    +
    +
    +
    +
    +
    +

    A key in a keyPath that may or may not be required.

    + +

    Trying to access a invalid key in a dictionary with an OptionalKey will usually result +in a nil return value instead of a thrown error. Unless isRequired is true, in which +it behaves as a normal String inside a normal KeyPath.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct OptionalKey
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + OptionalKeyPath + +
    +
    +
    +
    +
    +
    +

    OptionalKeyPath represents the path to a specific node in a tree of nested dictionaries.

    + +

    Can be created from string and array literals and can be joined by the =>? operator.

    +
     let a: OptionalKeyPath = "a"
    + let b: OptionalKeyPath = ["a", "b"]
    + let c: OptionalKeyPath = "a" =>? "b" =>? "c"
    +
    + +

    Unlike KeyPath, OptionalKeyPath allows each key to be either required or optional. +isRequired is false by default.

    + +

    When a KeyPath is converted to a OptionalKeyPath, isRequired is set to true.

    +
     let c: OptionalKeyPath = "a" =>? "b" => "c"
    +                                         ^^
    +                             isRequired=true
    +
    + +

    In the above example "c" is inferred as KeyPath, then converted to OptionalKeyPath + with isRequired = true

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct OptionalKeyPath
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/KeyPath.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/KeyPath.html new file mode 100644 index 0000000..65aade7 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/KeyPath.html @@ -0,0 +1,908 @@ + + + + KeyPath Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

KeyPath

+
+
+
public struct KeyPath
+ +
+
+

KeyPath represents the path to a specific node in a tree of nested dictionaries.

+ +

Can be created from string and array literals and can be joined by the => operator.

+
let a: KeyPath = "a"
+let b: KeyPath = ["a", "b"]
+let c: KeyPath = "a" => "b" => "c"
+
+ +
+
+
+
    +
  • +
    + + + + keys + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keys: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ keys: [String])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ key: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(stringLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(extendedGraphemeClusterLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(unicodeScalarLiteral value: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(arrayLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(arrayLiteral elements: String...)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKey.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKey.html new file mode 100644 index 0000000..5e8a4b7 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKey.html @@ -0,0 +1,797 @@ + + + + OptionalKey Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

OptionalKey

+
+
+
public struct OptionalKey
+ +
+
+

A key in a keyPath that may or may not be required.

+ +

Trying to access a invalid key in a dictionary with an OptionalKey will usually result +in a nil return value instead of a thrown error. Unless isRequired is true, in which +it behaves as a normal String inside a normal KeyPath.

+ +
+
+
+
    +
  • +
    + + + + key + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var key: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isRequired + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isRequired: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKeyPath.html b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKeyPath.html new file mode 100644 index 0000000..4d363b8 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/Structs/OptionalKeyPath.html @@ -0,0 +1,866 @@ + + + + OptionalKeyPath Structure Reference + + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+

OptionalKeyPath

+
+
+
public struct OptionalKeyPath
+ +
+
+

OptionalKeyPath represents the path to a specific node in a tree of nested dictionaries.

+ +

Can be created from string and array literals and can be joined by the =>? operator.

+
 let a: OptionalKeyPath = "a"
+ let b: OptionalKeyPath = ["a", "b"]
+ let c: OptionalKeyPath = "a" =>? "b" =>? "c"
+
+ +

Unlike KeyPath, OptionalKeyPath allows each key to be either required or optional. +isRequired is false by default.

+ +

When a KeyPath is converted to a OptionalKeyPath, isRequired is set to true.

+
 let c: OptionalKeyPath = "a" =>? "b" => "c"
+                                         ^^
+                             isRequired=true
+
+ +

In the above example "c" is inferred as KeyPath, then converted to OptionalKeyPath + with isRequired = true

+ +
+
+
+
    +
  • +
    + + + + keys + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keys: [OptionalKey]
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(stringLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(stringLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(extendedGraphemeClusterLiteral value: String)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(unicodeScalarLiteral value: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + init(arrayLiteral:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(arrayLiteral elements: String...)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/Decodable.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 0000000..d0db0e1 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/Decodable.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 0000000..103ee29 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,348 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 1; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 1; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 0px; } + .item .discouraged { + text-decoration: line-through; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/Decodable.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/Decodable.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 ShohtYzipXxh2)4xTk + + + Decodable Reference + + + + + + + + + +
+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+ +

Decodable

+ +

Simple and strict, yet powerful object mapping made possible by Swift 2’s error handling. Greatly inspired by Argo, but without a bizillion functional operators.

+ +

Carthage compatible +Cocoapods version +Platforms +Travis

+

+struct Repository {
+    let name: String
+    let description: String
+    let stargazersCount: Int
+    let language: String?
+    let sometimesMissingKey: String?
+
+    let owner: User // Struct conforming to Decodable
+    let defaultBranch: Branch // Struct NOT conforming to Decodable
+
+    var fullName: String { return "\(owner.login)/\(name)" }
+}
+
+extension Repository: Decodable {
+    static func decode(j: Any) throws -> Repository {
+        return try Repository(
+                    name: j => "nested" => "name",
+                    description: j => "description",
+                    stargazersCount: j => "stargazers_count",
+                    language: j => "language",
+                    sometimesMissingKey: j =>? "sometimesMissingKey",
+                    owner: j => "owner",
+                    defaultBranch: Branch(name: j => "default_branch")
+                )
+    }
+}
+
+do {
+    let json = try NSJSONSerialization.JSONObjectWithData(data, options: [])
+    let repo = try [Repository].decode(json)
+} catch {
+    print(error)
+}
+
+

How does it work?

+

A protocol

+
public protocol Decodable {
+    static func decode(json: Any) throws -> Self
+}
+
+

A parse-function

+
public func parse<T>(json: Any, path: [String], decode: (Any throws -> T)) throws -> T
+
+

And shameless operator-overloading

+ +

The too-many generated overloads, all calling the parse-function, can be found in Overloads.swift. Return types include T?, [T?], [T?]?, Any and [String: T]?. When conditional protocol conformance is supported in Swift this won’t be necessary, and automatic decoding of infinitely nested generic types (like [[[[[[[[[A???]]: B]]]?]]?]]) would work.

+ +

An overload may look like this:

+
public func => <T: Decodable>(json: Any, keyPath: KeyPath) throws -> T
+
+

KeyPaths

+ +

Keypaths can be created from string and array literals as well as with explicit initializers. They can also be joined using the operators => and =>?. =>? is another operator that indicates that nil should be returned if the key to the right is missing.

+ +
    +
  • When composing => and =>? operators in the same keypath, the strictness of => is still honoured.
  • +
  • Optional key paths (=>?) require an optional return type
  • +
+
let a: KeyPath = "a"
+let b: KeyPath = ["a", "b"]
+let c: KeyPath = "a" => "b" => "c"
+let string: String? = json =>? "key1" => "key2" => "key3"`
+                                ^^^^ allowed to be missing
+
+

Errors

+ +

Errors will be caught and rethrown in the decoding process to backpropagate metadata, like the JSON object that failed decoding, the key path to it, and the root JSON object.

+ +

From DecodingError.swift:

+
public enum DecodingError: ErrorProtocol, Equatable {
+    /// Thrown when optional casting from `Any` fails.
+    ///
+    /// This can happen both when trying to access a key on a object
+    /// that isn't a `NSDictionary`, and failing to cast a `Castable`
+    /// primitive.
+    case typeMismatch(expected: Any.Type, actual: Any.Type, Metadata)
+
+    /// Thrown when a given, required, key was not found in a dictionary.
+    case missingKey(String, Metadata)
+
+    /// Thrown from the `RawRepresentable` extension when
+    /// `init(rawValue:)` returned `nil`.
+    case rawRepresentableInitializationError(rawValue: Any, Metadata)
+
+    /// When an error is thrown that isn't `DecodingError`, it
+    /// will be wrapped in `DecodingError.other` in order to also provide
+    /// metadata about where the error was thrown.
+    case other(ErrorProtocol, Metadata)
+}
+
+
let dict: NSDictionary = ["object": ["repo": ["owner": ["id" : 1, "login": "anviking"]]]]
+
+do {
+    let username: String = try dict => "object" => "repo" => "owner" => "name"
+} catch let error {
+    print(error)
+}
+//
+// MissingKeyError at object.repo.owner: name in {
+//    id = 1;
+//    login = anviking;
+// }
+
+

Handling Errors

+ +

Expressions like j => "key" will throw directly, and catch-statements can be used to create the most complex error handling behaviours. This also means that try? can be used to return nil if anything goes wrong instead of throwing.

+ +

For convenience there is an operator, =>?, that only returns nil on missing keys, for APIs that indicate null in that manner, and to aid working with different response formats.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OverloadNull BehaviourMissing Key BehaviorType Mismatch BehaviourErrors in subjects
=> -> Tthrowsthrowsthrowsuncaught (throws)
=> -> T?nilthrowsthrowsuncaught (throws)
=>? -> T?nilnilthrowsuncaught (throws)
try? => -> Tnilnilnilcaught (nil)
+

Customization

+ +

Int, Double,String, Bool, Date (ISO8601), NSArray, and NSDictionary types that conform to DynamicDecodable with the following declaration:

+
public protocol DynamicDecodable {
+    associatedtype DecodedType
+    static var decoder: (Any) throws -> DecodedType {get set}
+}
+
+ +

This allows Decodable to implement default decoding closures while allowing you to override them as needed.

+
// Lets extend Bool.decoder so that it accepts certain strings:
+Bool.decoder = { json in
+    switch json {
+    case let str as String where str == "true":
+        return true
+    case let str as String where str == "false":
+        return false
+    default:
+        return try cast(json)
+    }
+}
+
+ +

Note that when extending new types to conform to Decodable there is really no point in conforming to DynamicDecodable since you already control the implementation. Also note that the decoder properties are intended as set once. If you need different behaviour on different occasions, please create custom decode functions.

+ +

The default Date.decoder uses a ISO8601 date formatter. If you don’t want to create your own decode closure there’s a helper:

+
Date.decoder = Date.decoder(using: formatter)
+
+

When Decodable isn’t enough

+ +

Don’t be afraid of not conforming to Decodable.

+
let array = try NSArray.decode(json => "list").map {
+    try Contribution(json: $0, repository: repo)
+}
+
+

Tips

+ +
    +
  • You can use Decodable with classes. Just make sure to either call a required initializer on self (e.g self.init) and return Self, or make your class final. ( This might be a problem though)
  • +
  • The Decodable-protocol and the =>-operator should in no way make you committed to use them everywhere.
  • +
+

Compatibility

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Swift versionCompatible tag or branch
Swift 5.00.7.0
Swift 4.00.6.0
Swift 3.0v0.5
Swift 2.3v0.4.4
Swift 2.2v0.4.3
+

Note on Swift 4.0 usage

+ +

Due to collisions with the standard library you will have to import ambiguous symbols specifically, in addition to Decodable as a whole.

+ +

This means you likely want the following

+
import Decodable
+import protocol Decodable.Decodable
+
+ +

and you can import other symbols, e.g KeyPath, DecodingError, in a similar fashion (using import struct and import enum)

+ +
+
+ +
+
+ + + diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 0000000..c31dc05 --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,59 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`.token[href="${location.hash}"]`); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); diff --git a/docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 0000000..a1c07fd --- /dev/null +++ b/docs/docsets/Decodable.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0Undocumented

","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s26ExpressibleByStringLiteralP06stringD0x0cD4TypeQz_tcfc":{"name":"init(stringLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s43ExpressibleByExtendedGraphemeClusterLiteralP08extendeddeF0x0cdeF4TypeQz_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s33ExpressibleByUnicodeScalarLiteralP07unicodedE0x0cdE4TypeQz_tcfc":{"name":"init(unicodeScalarLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfc":{"name":"init(arrayLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKey.html#/s:9Decodable11OptionalKeyV3keySSvp":{"name":"key","abstract":"

Undocumented

","parent_name":"OptionalKey"},"Structs/OptionalKey.html#/s:9Decodable11OptionalKeyV10isRequiredSbvp":{"name":"isRequired","abstract":"

Undocumented

","parent_name":"OptionalKey"},"Structs/OptionalKey.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"OptionalKey"},"Structs/KeyPath.html#/s:9Decodable7KeyPathV4keysSaySSGvp":{"name":"keys","abstract":"

Undocumented

","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:9Decodable7KeyPathVyACSaySSGcfc":{"name":"init(_:)","abstract":"

Undocumented

","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:9Decodable7KeyPathVyACSScfc":{"name":"init(_:)","abstract":"

Undocumented

","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s26ExpressibleByStringLiteralP06stringD0x0cD4TypeQz_tcfc":{"name":"init(stringLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s43ExpressibleByExtendedGraphemeClusterLiteralP08extendeddeF0x0cdeF4TypeQz_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s33ExpressibleByUnicodeScalarLiteralP07unicodedE0x0cdE4TypeQz_tcfc":{"name":"init(unicodeScalarLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfc":{"name":"init(arrayLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html":{"name":"KeyPath","abstract":"

KeyPath represents the path to a specific node in a tree of nested dictionaries.

"},"Structs/OptionalKey.html":{"name":"OptionalKey","abstract":"

A key in a keyPath that may or may not be required.

"},"Structs/OptionalKeyPath.html":{"name":"OptionalKeyPath","abstract":"

OptionalKeyPath represents the path to a specific node in a tree of nested dictionaries.

"},"Protocols/NSNumberCastable.html#/s:9Decodable16NSNumberCastableP11convertFromyxSo0B0CFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"NSNumberCastable"},"Protocols/NSNumberCastable.html#/s:9Decodable16NSNumberCastablePAAE6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSNumberCastable"},"Protocols/NSValueCastable.html#/s:9Decodable15NSValueCastablePAAE6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSValueCastable"},"Protocols/Decodable.html#/s:9DecodableAAP6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"Decodable"},"Protocols/DynamicDecodable.html#/s:9Decodable07DynamicA0P11DecodedTypeQa":{"name":"DecodedType","abstract":"

Undocumented

","parent_name":"DynamicDecodable"},"Protocols/DynamicDecodable.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","abstract":"

A closure describing how this type should be decoded

","parent_name":"DynamicDecodable"},"Protocols/DynamicDecodable.html":{"name":"DynamicDecodable","abstract":"

Allows overriding default decode function from your app.

"},"Protocols/Decodable.html":{"name":"Decodable","abstract":"

Undocumented

"},"Protocols/NSValueCastable.html":{"name":"NSValueCastable","abstract":"

Provides a default implementation of decode() which casts the object to a NSValue and unsafely casts its value as Self.

"},"Protocols/NSNumberCastable.html":{"name":"NSNumberCastable","abstract":"

Used to enable decoding to different IntegerTypes from NSNumber.

"},"Functions.html#/s:9Decodable4castyxypKlF":{"name":"cast(_:)","abstract":"

Attempt to cast an Any to T or throw

"},"Functions.html#/s:9Decodable13decodeAsOneOf_11objectTypesA2A_pyp_A2A_pXpdtKF":{"name":"decodeAsOneOf(_:objectTypes:)","abstract":"

Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

"},"Functions.html#/s:9Decodable18decodeArrayAsOneOf_11objectTypesSayA2A_pGyp_A2A_pXpdtKF":{"name":"decodeArrayAsOneOf(_:objectTypes:)","abstract":"

Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

"},"Functions.html#/s:9Decodable2teoiySbxm_ypXptlF":{"name":"~=(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA13DecodingErrorO8MetadataV_AFtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA13DecodingErrorO_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA7KeyPathV_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiyypyp_AA7KeyPathVtKF":{"name":"=>(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable3egqoiyypSgyp_AA15OptionalKeyPathVtKF":{"name":"=>?(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiyAA7KeyPathVAD_ADtF":{"name":"=>(_:_:)","abstract":"

Enables parsing nested objects e.g json => a => b

"},"Functions.html#/s:9Decodable2egoiyAA15OptionalKeyPathVAD_ADtF":{"name":"=>(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable3egqoiyAA15OptionalKeyPathVAD_ADtF":{"name":"=>?(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiyAA15OptionalKeyPathVAD_AA0dE0VtF":{"name":"=>(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable3egqoiyAA15OptionalKeyPathVAA0dE0V_ADtF":{"name":"=>?(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA11OptionalKeyV_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiySaySayxGSgGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GSgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxSgGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxSgGGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGGGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxGGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_SgGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GSgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GSgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_SgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_SgGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_SgGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_GSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiyxSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxSgGSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGGSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxGSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_SgGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGSgGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxSgGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxSgGGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySaySayxGGGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySaySDyxq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxSayq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxSDyq_q0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_SgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSaySayq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSaySDyq_q0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_Sayq0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_SDyq0_q1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_SgGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_SgGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_SgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_SgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySaySayq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySaySDyq_q0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_Sayq0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_SDyq0_q1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_SgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SaySayq0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SaySDyq0_q1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_Sayq1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_SDyq1_q2_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_SHR1_A2AR2_r3_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_Gyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiyxyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxSgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxGGSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxGSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_SgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_GSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySayxSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxGSgGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxSgGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxSgGGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySaySayxGGGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySaySDyxq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxGGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxSayq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxSDyq_q0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_SgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSaySayq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSaySDyq_q0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_Sayq0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_SDyq0_q1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_GGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySayxGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_SgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_GSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_SgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_GSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxq_SgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_SgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySaySayq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySaySDyq_q0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_Sayq0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_SDyq0_q1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_GGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_SgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SaySayq0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SaySDyq0_q1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_Sayq1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_SDyq1_q2_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_SHR1_A2AR2_r3_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_GGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxq_GSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiyxSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable5parse_7keyPath7decoderxyp_AA03KeyD0VxypKXEtKlF":{"name":"parse(_:keyPath:decoder:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable5parse_7keyPath7decoderxSgyp_AA011OptionalKeyD0VAEypKXEtKlF":{"name":"parse(_:keyPath:decoder:)","abstract":"

Undocumented

"},"Extensions/RawRepresentable.html#/s:SY9DecodableA2ARzA2A8RawValueSYRpzrlE6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"RawRepresentable"},"Extensions/UInt8.html#/s:s5UInt8V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt8"},"Extensions/UInt16.html#/s:s6UInt16V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt16"},"Extensions/UInt32.html#/s:s6UInt32V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt32"},"Extensions/UInt64.html#/s:s6UInt64V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt64"},"Extensions/Int8.html#/s:s4Int8V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int8"},"Extensions/Int16.html#/s:s5Int16V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int16"},"Extensions/Int32.html#/s:s5Int32V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int32"},"Extensions/Int64.html#/s:s5Int64V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int64"},"Extensions/Array.html#/s:Sa9DecodableA2ARzlE6decode_20ignoreInvalidObjectsSayxGyp_SbtKFZ":{"name":"decode(_:ignoreInvalidObjects:)","abstract":"

Undocumented

","parent_name":"Array"},"Extensions/Array.html#/s:Sa9DecodableE7decoderySayxGypKcxypKcFZ":{"name":"decoder(_:)","abstract":"

Creates an array decoder from an element decoder

","parent_name":"Array"},"Extensions/Dictionary.html#/s:SD9DecodableA2ARzA2AR_rlE6decodeySDyxq_GypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"Dictionary"},"Extensions/Dictionary.html#/s:SD9DecodableE7decoder3key5valueSDyxq_GypKcxypKc_q_ypKctFZ":{"name":"decoder(key:value:)","abstract":"

Create a dictionary decoder from key- and value- decoders

","parent_name":"Dictionary"},"Extensions/URL.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"URL"},"Extensions/NSArray.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"NSArray"},"Extensions/NSArray.html#/s:So7NSArrayC9DecodableE6decodeyABypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSArray"},"Extensions/NSDictionary.html#/s:So12NSDictionaryC9DecodableE6decodeyABXDypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSDictionary"},"Extensions/Date.html#/s:10Foundation4DateV9DecodableE7decoderyACypKcvpZ":{"name":"decoder","abstract":"

Default decoder is Date.decoder(using: iso8601DateFormatter)

","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV9DecodableE7decoder5usingACypKcSo15NSDateFormatterC_tFZ":{"name":"decoder(using:)","abstract":"

Create a decode closure using a given formatter

","parent_name":"Date"},"Extensions/Bool.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"Bool"},"Extensions/Double.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"Double"},"Extensions/Int.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"Int"},"Extensions/String.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"String"},"Extensions/String.html":{"name":"String"},"Extensions/Int.html":{"name":"Int"},"Extensions/Double.html":{"name":"Double"},"Extensions/Bool.html":{"name":"Bool"},"Extensions/Date.html":{"name":"Date"},"Extensions/NSDictionary.html":{"name":"NSDictionary"},"Extensions/NSArray.html":{"name":"NSArray"},"Extensions/URL.html":{"name":"URL"},"Extensions/Dictionary.html":{"name":"Dictionary"},"Extensions/Array.html":{"name":"Array"},"Extensions/Int64.html":{"name":"Int64"},"Extensions/Int32.html":{"name":"Int32"},"Extensions/Int16.html":{"name":"Int16"},"Extensions/Int8.html":{"name":"Int8"},"Extensions/UInt64.html":{"name":"UInt64"},"Extensions/UInt32.html":{"name":"UInt32"},"Extensions/UInt16.html":{"name":"UInt16"},"Extensions/UInt8.html":{"name":"UInt8"},"Extensions/RawRepresentable.html":{"name":"RawRepresentable","abstract":"

Extends all RawRepresentables (enums) which are also Decodable with decode implementation.

"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV4path6object10rootObjectAESaySSG_ypypSgtcfc":{"name":"init(path:object:rootObject:)","abstract":"

Undocumented

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV4pathSaySSGvp":{"name":"path","abstract":"

The JSON key path to the object that failed to be decoded

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV6objectypvp":{"name":"object","abstract":"

The JSON object that failed to be decoded

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV10rootObjectypSgvp":{"name":"rootObject","abstract":"

The root JSON object for which the path can be used to find object

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV13formattedPathSSvp":{"name":"formattedPath","abstract":"

Represents the path to the object that failed decoding with . as a separator.

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html":{"name":"Metadata","abstract":"

DecodingError.Metadata provides information about","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO12typeMismatchyACypXp_ypXpAC8MetadataVtcACmF":{"name":"typeMismatch(expected:actual:_:)","abstract":"

Thrown when optional casting from Any fails.

","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO10missingKeyyACSS_AC8MetadataVtcACmF":{"name":"missingKey(_:_:)","abstract":"

Thrown when a given, required, key was not found in a dictionary.

","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO030rawRepresentableInitializationC0yACyp_AC8MetadataVtcACmF":{"name":"rawRepresentableInitializationError(rawValue:_:)","abstract":"

Thrown from the RawRepresentable extension when","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO5otheryACs0C0_p_AC8MetadataVtcACmF":{"name":"other(_:_:)","abstract":"

When an error is thrown that isn’t DecodingError, it","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO8metadataAC8MetadataVvp":{"name":"metadata","abstract":"

Undocumented

","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

Undocumented

","parent_name":"DecodingError"},"Enums/DecodingError.html":{"name":"DecodingError","abstract":"

Undocumented

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"}} \ No newline at end of file diff --git a/docs/docsets/Decodable.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Decodable.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..b586eedc725b8def76e0a0f44708bc8bbf1615d1 GIT binary patch literal 77824 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 literal 0 HcmV?d00001 diff --git a/docs/docsets/Decodable.tgz b/docs/docsets/Decodable.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c7b6c57dfb4a148a5e9886daf1a104609072b6fa GIT binary patch literal 160918 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%0DJm4IvQt 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¨#2KXN-c(325WWfK$)12Ard0gIh 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 S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/img/dash.png b/docs/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 ShohtYzipXxh2)4xTk + + + Decodable Reference + + + + + + + + + +

+
+

Decodable Docs (83% documented)

+
+
+
+ +
+
+ +
+
+
+ +

Decodable

+ +

Simple and strict, yet powerful object mapping made possible by Swift 2’s error handling. Greatly inspired by Argo, but without a bizillion functional operators.

+ +

Carthage compatible +Cocoapods version +Platforms +Travis

+

+struct Repository {
+    let name: String
+    let description: String
+    let stargazersCount: Int
+    let language: String?
+    let sometimesMissingKey: String?
+
+    let owner: User // Struct conforming to Decodable
+    let defaultBranch: Branch // Struct NOT conforming to Decodable
+
+    var fullName: String { return "\(owner.login)/\(name)" }
+}
+
+extension Repository: Decodable {
+    static func decode(j: Any) throws -> Repository {
+        return try Repository(
+                    name: j => "nested" => "name",
+                    description: j => "description",
+                    stargazersCount: j => "stargazers_count",
+                    language: j => "language",
+                    sometimesMissingKey: j =>? "sometimesMissingKey",
+                    owner: j => "owner",
+                    defaultBranch: Branch(name: j => "default_branch")
+                )
+    }
+}
+
+do {
+    let json = try NSJSONSerialization.JSONObjectWithData(data, options: [])
+    let repo = try [Repository].decode(json)
+} catch {
+    print(error)
+}
+
+

How does it work?

+

A protocol

+
public protocol Decodable {
+    static func decode(json: Any) throws -> Self
+}
+
+

A parse-function

+
public func parse<T>(json: Any, path: [String], decode: (Any throws -> T)) throws -> T
+
+

And shameless operator-overloading

+ +

The too-many generated overloads, all calling the parse-function, can be found in Overloads.swift. Return types include T?, [T?], [T?]?, Any and [String: T]?. When conditional protocol conformance is supported in Swift this won’t be necessary, and automatic decoding of infinitely nested generic types (like [[[[[[[[[A???]]: B]]]?]]?]]) would work.

+ +

An overload may look like this:

+
public func => <T: Decodable>(json: Any, keyPath: KeyPath) throws -> T
+
+

KeyPaths

+ +

Keypaths can be created from string and array literals as well as with explicit initializers. They can also be joined using the operators => and =>?. =>? is another operator that indicates that nil should be returned if the key to the right is missing.

+ +
    +
  • When composing => and =>? operators in the same keypath, the strictness of => is still honoured.
  • +
  • Optional key paths (=>?) require an optional return type
  • +
+
let a: KeyPath = "a"
+let b: KeyPath = ["a", "b"]
+let c: KeyPath = "a" => "b" => "c"
+let string: String? = json =>? "key1" => "key2" => "key3"`
+                                ^^^^ allowed to be missing
+
+

Errors

+ +

Errors will be caught and rethrown in the decoding process to backpropagate metadata, like the JSON object that failed decoding, the key path to it, and the root JSON object.

+ +

From DecodingError.swift:

+
public enum DecodingError: ErrorProtocol, Equatable {
+    /// Thrown when optional casting from `Any` fails.
+    ///
+    /// This can happen both when trying to access a key on a object
+    /// that isn't a `NSDictionary`, and failing to cast a `Castable`
+    /// primitive.
+    case typeMismatch(expected: Any.Type, actual: Any.Type, Metadata)
+
+    /// Thrown when a given, required, key was not found in a dictionary.
+    case missingKey(String, Metadata)
+
+    /// Thrown from the `RawRepresentable` extension when
+    /// `init(rawValue:)` returned `nil`.
+    case rawRepresentableInitializationError(rawValue: Any, Metadata)
+
+    /// When an error is thrown that isn't `DecodingError`, it
+    /// will be wrapped in `DecodingError.other` in order to also provide
+    /// metadata about where the error was thrown.
+    case other(ErrorProtocol, Metadata)
+}
+
+
let dict: NSDictionary = ["object": ["repo": ["owner": ["id" : 1, "login": "anviking"]]]]
+
+do {
+    let username: String = try dict => "object" => "repo" => "owner" => "name"
+} catch let error {
+    print(error)
+}
+//
+// MissingKeyError at object.repo.owner: name in {
+//    id = 1;
+//    login = anviking;
+// }
+
+

Handling Errors

+ +

Expressions like j => "key" will throw directly, and catch-statements can be used to create the most complex error handling behaviours. This also means that try? can be used to return nil if anything goes wrong instead of throwing.

+ +

For convenience there is an operator, =>?, that only returns nil on missing keys, for APIs that indicate null in that manner, and to aid working with different response formats.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OverloadNull BehaviourMissing Key BehaviorType Mismatch BehaviourErrors in subjects
=> -> Tthrowsthrowsthrowsuncaught (throws)
=> -> T?nilthrowsthrowsuncaught (throws)
=>? -> T?nilnilthrowsuncaught (throws)
try? => -> Tnilnilnilcaught (nil)
+

Customization

+ +

Int, Double,String, Bool, Date (ISO8601), NSArray, and NSDictionary types that conform to DynamicDecodable with the following declaration:

+
public protocol DynamicDecodable {
+    associatedtype DecodedType
+    static var decoder: (Any) throws -> DecodedType {get set}
+}
+
+ +

This allows Decodable to implement default decoding closures while allowing you to override them as needed.

+
// Lets extend Bool.decoder so that it accepts certain strings:
+Bool.decoder = { json in
+    switch json {
+    case let str as String where str == "true":
+        return true
+    case let str as String where str == "false":
+        return false
+    default:
+        return try cast(json)
+    }
+}
+
+ +

Note that when extending new types to conform to Decodable there is really no point in conforming to DynamicDecodable since you already control the implementation. Also note that the decoder properties are intended as set once. If you need different behaviour on different occasions, please create custom decode functions.

+ +

The default Date.decoder uses a ISO8601 date formatter. If you don’t want to create your own decode closure there’s a helper:

+
Date.decoder = Date.decoder(using: formatter)
+
+

When Decodable isn’t enough

+ +

Don’t be afraid of not conforming to Decodable.

+
let array = try NSArray.decode(json => "list").map {
+    try Contribution(json: $0, repository: repo)
+}
+
+

Tips

+ +
    +
  • You can use Decodable with classes. Just make sure to either call a required initializer on self (e.g self.init) and return Self, or make your class final. ( This might be a problem though)
  • +
  • The Decodable-protocol and the =>-operator should in no way make you committed to use them everywhere.
  • +
+

Compatibility

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Swift versionCompatible tag or branch
Swift 5.00.7.0
Swift 4.00.6.0
Swift 3.0v0.5
Swift 2.3v0.4.4
Swift 2.2v0.4.3
+

Note on Swift 4.0 usage

+ +

Due to collisions with the standard library you will have to import ambiguous symbols specifically, in addition to Decodable as a whole.

+ +

This means you likely want the following

+
import Decodable
+import protocol Decodable.Decodable
+
+ +

and you can import other symbols, e.g KeyPath, DecodingError, in a similar fashion (using import struct and import enum)

+ +
+
+ +
+
+ + + diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js new file mode 100755 index 0000000..c31dc05 --- /dev/null +++ b/docs/js/jazzy.js @@ -0,0 +1,59 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`.token[href="${location.hash}"]`); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); diff --git a/docs/js/jquery.min.js b/docs/js/jquery.min.js new file mode 100644 index 0000000..a1c07fd --- /dev/null +++ b/docs/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0Undocumented

","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s26ExpressibleByStringLiteralP06stringD0x0cD4TypeQz_tcfc":{"name":"init(stringLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s43ExpressibleByExtendedGraphemeClusterLiteralP08extendeddeF0x0cdeF4TypeQz_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s33ExpressibleByUnicodeScalarLiteralP07unicodedE0x0cdE4TypeQz_tcfc":{"name":"init(unicodeScalarLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKeyPath.html#/s:s25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfc":{"name":"init(arrayLiteral:)","parent_name":"OptionalKeyPath"},"Structs/OptionalKey.html#/s:9Decodable11OptionalKeyV3keySSvp":{"name":"key","abstract":"

Undocumented

","parent_name":"OptionalKey"},"Structs/OptionalKey.html#/s:9Decodable11OptionalKeyV10isRequiredSbvp":{"name":"isRequired","abstract":"

Undocumented

","parent_name":"OptionalKey"},"Structs/OptionalKey.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"OptionalKey"},"Structs/KeyPath.html#/s:9Decodable7KeyPathV4keysSaySSGvp":{"name":"keys","abstract":"

Undocumented

","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:9Decodable7KeyPathVyACSaySSGcfc":{"name":"init(_:)","abstract":"

Undocumented

","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:9Decodable7KeyPathVyACSScfc":{"name":"init(_:)","abstract":"

Undocumented

","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s26ExpressibleByStringLiteralP06stringD0x0cD4TypeQz_tcfc":{"name":"init(stringLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s43ExpressibleByExtendedGraphemeClusterLiteralP08extendeddeF0x0cdeF4TypeQz_tcfc":{"name":"init(extendedGraphemeClusterLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s33ExpressibleByUnicodeScalarLiteralP07unicodedE0x0cdE4TypeQz_tcfc":{"name":"init(unicodeScalarLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html#/s:s25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfc":{"name":"init(arrayLiteral:)","parent_name":"KeyPath"},"Structs/KeyPath.html":{"name":"KeyPath","abstract":"

KeyPath represents the path to a specific node in a tree of nested dictionaries.

"},"Structs/OptionalKey.html":{"name":"OptionalKey","abstract":"

A key in a keyPath that may or may not be required.

"},"Structs/OptionalKeyPath.html":{"name":"OptionalKeyPath","abstract":"

OptionalKeyPath represents the path to a specific node in a tree of nested dictionaries.

"},"Protocols/NSNumberCastable.html#/s:9Decodable16NSNumberCastableP11convertFromyxSo0B0CFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"NSNumberCastable"},"Protocols/NSNumberCastable.html#/s:9Decodable16NSNumberCastablePAAE6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSNumberCastable"},"Protocols/NSValueCastable.html#/s:9Decodable15NSValueCastablePAAE6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSValueCastable"},"Protocols/Decodable.html#/s:9DecodableAAP6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"Decodable"},"Protocols/DynamicDecodable.html#/s:9Decodable07DynamicA0P11DecodedTypeQa":{"name":"DecodedType","abstract":"

Undocumented

","parent_name":"DynamicDecodable"},"Protocols/DynamicDecodable.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","abstract":"

A closure describing how this type should be decoded

","parent_name":"DynamicDecodable"},"Protocols/DynamicDecodable.html":{"name":"DynamicDecodable","abstract":"

Allows overriding default decode function from your app.

"},"Protocols/Decodable.html":{"name":"Decodable","abstract":"

Undocumented

"},"Protocols/NSValueCastable.html":{"name":"NSValueCastable","abstract":"

Provides a default implementation of decode() which casts the object to a NSValue and unsafely casts its value as Self.

"},"Protocols/NSNumberCastable.html":{"name":"NSNumberCastable","abstract":"

Used to enable decoding to different IntegerTypes from NSNumber.

"},"Functions.html#/s:9Decodable4castyxypKlF":{"name":"cast(_:)","abstract":"

Attempt to cast an Any to T or throw

"},"Functions.html#/s:9Decodable13decodeAsOneOf_11objectTypesA2A_pyp_A2A_pXpdtKF":{"name":"decodeAsOneOf(_:objectTypes:)","abstract":"

Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

"},"Functions.html#/s:9Decodable18decodeArrayAsOneOf_11objectTypesSayA2A_pGyp_A2A_pXpdtKF":{"name":"decodeArrayAsOneOf(_:objectTypes:)","abstract":"

Attempt to decode one of multiple objects in order until: A: we get a positive match, B: we throw an exception if the last object does not decode

"},"Functions.html#/s:9Decodable2teoiySbxm_ypXptlF":{"name":"~=(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA13DecodingErrorO8MetadataV_AFtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA13DecodingErrorO_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA7KeyPathV_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiyypyp_AA7KeyPathVtKF":{"name":"=>(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable3egqoiyypSgyp_AA15OptionalKeyPathVtKF":{"name":"=>?(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiyAA7KeyPathVAD_ADtF":{"name":"=>(_:_:)","abstract":"

Enables parsing nested objects e.g json => a => b

"},"Functions.html#/s:9Decodable2egoiyAA15OptionalKeyPathVAD_ADtF":{"name":"=>(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable3egqoiyAA15OptionalKeyPathVAD_ADtF":{"name":"=>?(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiyAA15OptionalKeyPathVAD_AA0dE0VtF":{"name":"=>(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable3egqoiyAA15OptionalKeyPathVAA0dE0V_ADtF":{"name":"=>?(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2eeoiySbAA11OptionalKeyV_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable2egoiySaySayxGSgGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GSgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxSgGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxSgGGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGGGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxGGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_SgGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxGSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GSgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GSgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_SgGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_SgGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_SgGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GGGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GGSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_GSgyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiyxSgyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxSgGSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGGSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxGSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_SgGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxSgGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGSgGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxSgGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxSgGGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySaySayxGGGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySaySDyxq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySayxGGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxSayq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxSDyq_q0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySaySDyxq_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySayxGGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_SgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSaySayq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSaySDyq_q0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSayq_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_Sayq0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_SDyq0_q1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxSDyq_q0_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySaySDyxq_GGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySayxGyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_SgGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_SgGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GGSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GSgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_SgGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_SgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySaySayq_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySaySDyq_q0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySayq_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_Sayq0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_SDyq0_q1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSaySDyq_q0_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSayq_GGyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GSgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_SgGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SaySayq0_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SaySDyq0_q1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_Sayq0_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_SgGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_Sayq1_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_SDyq1_q2_GGGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_SHR1_A2AR2_r3_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_SDyq0_q1_GGGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxSDyq_q0_GGyp_AA7KeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiySDyxq_Gyp_AA7KeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable2egoiyxyp_AA7KeyPathVtKA2ARzlF":{"name":"=>(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxSgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxGGSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxGSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_SgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_GSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySayxSgGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxGSgGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxSgGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxSgGGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySaySayxGGGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySaySDyxq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySayxGGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxSayq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxSDyq_q0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySaySDyxq_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySayxGGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_SgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSaySayq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSaySDyq_q0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSayq_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_Sayq0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_SDyq0_q1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxSDyq_q0_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySaySDyxq_GGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySayxGSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_SgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_GSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_SgGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_GGSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_GSgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxq_SgGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_SgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySaySayq_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySaySDyq_q0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySayq_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_Sayq0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_SDyq0_q1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSaySDyq_q0_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSayq_GGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_GSgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_SgGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SaySayq0_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SaySDyq0_q1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_Sayq0_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_SgGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_Sayq1_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_SDyq1_q2_GGGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_SHR1_A2AR2_r3_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_SDyq0_q1_GGGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_SHR0_A2AR1_r2_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxSDyq_q0_GGSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_SHR_A2AR0_r1_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiySDyxq_GSgyp_AA15OptionalKeyPathVtKA2ARzSHRzA2AR_r0_lF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable3egqoiyxSgyp_AA15OptionalKeyPathVtKA2ARzlF":{"name":"=>?(_:_:)","abstract":"

Retrieves the object at path from json and decodes it according to the return type

"},"Functions.html#/s:9Decodable5parse_7keyPath7decoderxyp_AA03KeyD0VxypKXEtKlF":{"name":"parse(_:keyPath:decoder:)","abstract":"

Undocumented

"},"Functions.html#/s:9Decodable5parse_7keyPath7decoderxSgyp_AA011OptionalKeyD0VAEypKXEtKlF":{"name":"parse(_:keyPath:decoder:)","abstract":"

Undocumented

"},"Extensions/RawRepresentable.html#/s:SY9DecodableA2ARzA2A8RawValueSYRpzrlE6decodeyxypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"RawRepresentable"},"Extensions/UInt8.html#/s:s5UInt8V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt8"},"Extensions/UInt16.html#/s:s6UInt16V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt16"},"Extensions/UInt32.html#/s:s6UInt32V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt32"},"Extensions/UInt64.html#/s:s6UInt64V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"UInt64"},"Extensions/Int8.html#/s:s4Int8V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int8"},"Extensions/Int16.html#/s:s5Int16V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int16"},"Extensions/Int32.html#/s:s5Int32V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int32"},"Extensions/Int64.html#/s:s5Int64V9DecodableE11convertFromyABSo8NSNumberCFZ":{"name":"convertFrom(_:)","abstract":"

Undocumented

","parent_name":"Int64"},"Extensions/Array.html#/s:Sa9DecodableA2ARzlE6decode_20ignoreInvalidObjectsSayxGyp_SbtKFZ":{"name":"decode(_:ignoreInvalidObjects:)","abstract":"

Undocumented

","parent_name":"Array"},"Extensions/Array.html#/s:Sa9DecodableE7decoderySayxGypKcxypKcFZ":{"name":"decoder(_:)","abstract":"

Creates an array decoder from an element decoder

","parent_name":"Array"},"Extensions/Dictionary.html#/s:SD9DecodableA2ARzA2AR_rlE6decodeySDyxq_GypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"Dictionary"},"Extensions/Dictionary.html#/s:SD9DecodableE7decoder3key5valueSDyxq_GypKcxypKc_q_ypKctFZ":{"name":"decoder(key:value:)","abstract":"

Create a dictionary decoder from key- and value- decoders

","parent_name":"Dictionary"},"Extensions/URL.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"URL"},"Extensions/NSArray.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"NSArray"},"Extensions/NSArray.html#/s:So7NSArrayC9DecodableE6decodeyABypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSArray"},"Extensions/NSDictionary.html#/s:So12NSDictionaryC9DecodableE6decodeyABXDypKFZ":{"name":"decode(_:)","abstract":"

Undocumented

","parent_name":"NSDictionary"},"Extensions/Date.html#/s:10Foundation4DateV9DecodableE7decoderyACypKcvpZ":{"name":"decoder","abstract":"

Default decoder is Date.decoder(using: iso8601DateFormatter)

","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV9DecodableE7decoder5usingACypKcSo15NSDateFormatterC_tFZ":{"name":"decoder(using:)","abstract":"

Create a decode closure using a given formatter

","parent_name":"Date"},"Extensions/Bool.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"Bool"},"Extensions/Double.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"Double"},"Extensions/Int.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"Int"},"Extensions/String.html#/s:9Decodable07DynamicA0P7decodery11DecodedTypeQzypKcvpZ":{"name":"decoder","parent_name":"String"},"Extensions/String.html":{"name":"String"},"Extensions/Int.html":{"name":"Int"},"Extensions/Double.html":{"name":"Double"},"Extensions/Bool.html":{"name":"Bool"},"Extensions/Date.html":{"name":"Date"},"Extensions/NSDictionary.html":{"name":"NSDictionary"},"Extensions/NSArray.html":{"name":"NSArray"},"Extensions/URL.html":{"name":"URL"},"Extensions/Dictionary.html":{"name":"Dictionary"},"Extensions/Array.html":{"name":"Array"},"Extensions/Int64.html":{"name":"Int64"},"Extensions/Int32.html":{"name":"Int32"},"Extensions/Int16.html":{"name":"Int16"},"Extensions/Int8.html":{"name":"Int8"},"Extensions/UInt64.html":{"name":"UInt64"},"Extensions/UInt32.html":{"name":"UInt32"},"Extensions/UInt16.html":{"name":"UInt16"},"Extensions/UInt8.html":{"name":"UInt8"},"Extensions/RawRepresentable.html":{"name":"RawRepresentable","abstract":"

Extends all RawRepresentables (enums) which are also Decodable with decode implementation.

"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV4path6object10rootObjectAESaySSG_ypypSgtcfc":{"name":"init(path:object:rootObject:)","abstract":"

Undocumented

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV4pathSaySSGvp":{"name":"path","abstract":"

The JSON key path to the object that failed to be decoded

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV6objectypvp":{"name":"object","abstract":"

The JSON object that failed to be decoded

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV10rootObjectypSgvp":{"name":"rootObject","abstract":"

The root JSON object for which the path can be used to find object

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html#/s:9Decodable13DecodingErrorO8MetadataV13formattedPathSSvp":{"name":"formattedPath","abstract":"

Represents the path to the object that failed decoding with . as a separator.

","parent_name":"Metadata"},"Enums/DecodingError/Metadata.html":{"name":"Metadata","abstract":"

DecodingError.Metadata provides information about","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO12typeMismatchyACypXp_ypXpAC8MetadataVtcACmF":{"name":"typeMismatch(expected:actual:_:)","abstract":"

Thrown when optional casting from Any fails.

","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO10missingKeyyACSS_AC8MetadataVtcACmF":{"name":"missingKey(_:_:)","abstract":"

Thrown when a given, required, key was not found in a dictionary.

","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO030rawRepresentableInitializationC0yACyp_AC8MetadataVtcACmF":{"name":"rawRepresentableInitializationError(rawValue:_:)","abstract":"

Thrown from the RawRepresentable extension when","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO5otheryACs0C0_p_AC8MetadataVtcACmF":{"name":"other(_:_:)","abstract":"

When an error is thrown that isn’t DecodingError, it","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO8metadataAC8MetadataVvp":{"name":"metadata","abstract":"

Undocumented

","parent_name":"DecodingError"},"Enums/DecodingError.html#/s:9Decodable13DecodingErrorO16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

Undocumented

","parent_name":"DecodingError"},"Enums/DecodingError.html":{"name":"DecodingError","abstract":"

Undocumented

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json new file mode 100644 index 0000000..5211ccc --- /dev/null +++ b/docs/undocumented.json @@ -0,0 +1,313 @@ +{ + "warnings": [ + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Castable.swift", + "line": 26, + "symbol": "DynamicDecodable.DecodedType", + "symbol_kind": "source.lang.swift.decl.associatedtype", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Castable.swift", + "line": 38, + "symbol": "Decodable.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Castable.swift", + "line": 89, + "symbol": "NSDictionary.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Castable.swift", + "line": 96, + "symbol": "NSArray.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Decodable.swift", + "line": 11, + "symbol": "Decodable", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Decodable.swift", + "line": 12, + "symbol": "Decodable.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Decodable.swift", + "line": 17, + "symbol": "Dictionary.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Decodable.swift", + "line": 35, + "symbol": "Array.decode(_:ignoreInvalidObjects:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Decodable.swift", + "line": 37, + "symbol": "Decodable", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 11, + "symbol": "DecodingError", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 18, + "symbol": "DecodingError.Metadata.init(path:object:rootObject:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 58, + "symbol": "DecodingError.metadata", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 87, + "symbol": "DecodingError.debugDescription", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 107, + "symbol": "~=(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 112, + "symbol": "==(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/DecodingError.swift", + "line": 118, + "symbol": "==(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/KeyPath.swift", + "line": 21, + "symbol": "KeyPath.keys", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/KeyPath.swift", + "line": 23, + "symbol": "KeyPath.init(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/KeyPath.swift", + "line": 27, + "symbol": "KeyPath.init(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/KeyPath.swift", + "line": 54, + "symbol": "==(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 12, + "symbol": "Int64.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 15, + "symbol": "Int32.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 18, + "symbol": "Int16.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 21, + "symbol": "Int8.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 24, + "symbol": "UInt64.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 27, + "symbol": "UInt32.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 30, + "symbol": "UInt16.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 33, + "symbol": "UInt8.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 41, + "symbol": "NSNumberCastable.convertFrom(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 46, + "symbol": "NSValueCastable.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/NSValueCastable.swift", + "line": 56, + "symbol": "NSNumberCastable.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Operators.swift", + "line": 21, + "symbol": "=>(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Operators.swift", + "line": 26, + "symbol": "=>?(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Operators.swift", + "line": 38, + "symbol": "=>(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Operators.swift", + "line": 42, + "symbol": "=>?(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Operators.swift", + "line": 46, + "symbol": "=>(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Operators.swift", + "line": 51, + "symbol": "=>?(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/OptionalKeyPath.swift", + "line": 17, + "symbol": "OptionalKey.key", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/OptionalKeyPath.swift", + "line": 18, + "symbol": "OptionalKey.isRequired", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/OptionalKeyPath.swift", + "line": 48, + "symbol": "OptionalKeyPath.keys", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/OptionalKeyPath.swift", + "line": 89, + "symbol": "==(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Parse.swift", + "line": 45, + "symbol": "parse(_:keyPath:decoder:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/Parse.swift", + "line": 51, + "symbol": "parse(_:keyPath:decoder:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable/Sources/RawRepresentableDecodable.swift", + "line": 17, + "symbol": "RawRepresentable.decode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + } + ], + "source_directory": "/Users/mattielloj/Workspace/REEL/Frameworks/Decodable" +} \ No newline at end of file