From 07cf1456862802bc57e637e469e6de47ebf59fb3 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 15 Feb 2022 11:00:34 -0600 Subject: [PATCH] refactored to new throws JSONAny Signed-off-by: Matt Bruce --- MVMCore/MVMCore/Models/JSON/JSONValue.swift | 34 ++++++++++++++------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/MVMCore/MVMCore/Models/JSON/JSONValue.swift b/MVMCore/MVMCore/Models/JSON/JSONValue.swift index 2ce4a31..acb2482 100644 --- a/MVMCore/MVMCore/Models/JSON/JSONValue.swift +++ b/MVMCore/MVMCore/Models/JSON/JSONValue.swift @@ -13,6 +13,7 @@ public typealias JSONValueDictionary = [String: JSONValue] public enum JSONValueError: Error { case encode + case TypeMismatch } extension Optional { @@ -69,25 +70,36 @@ public enum JSONValue: Codable, Equatable { } } - public var base: Any? { + public var base: Any { switch self { case .string(let string): return string case .int(let int): return int case .double(let double): return double case .bool(let bool): return bool - case .object(let object): return object.toJSONAny() - case .array(let array): return ["array": array].toJSONAny()?["array"] - case .null: return nil + case .object(let object): return try! object.toJSONAny() + case .array(let array): return try! ["array": array].toJSONAny()["array"]! + case .null: return NSNull() } } - public func value() -> T? { self.base as? T } - public func toString() -> String? { self.base as? String } - public func toDouble() -> Double? { self.base as? Double } - public func toInt() -> Int? { self.base as? Int } - public func toBool() -> Bool? { self.base as? Bool } - public func toArray(of type: T.Type) -> [T]?{ self.base as? [T] } - public func toObject(of type: T.Type) -> T? { self.base as? T } + public func value() throws -> T { + guard let base = self.base as? T else { + throw JSONValueError.TypeMismatch + } + return base + } + + private func value(type: T.Type) throws -> T { + let base: T = try value() + return base + } + + public func toString() throws -> String { try value(type: String.self) } + public func toDouble() throws -> Double { try value(type: Double.self) } + public func toInt() throws -> Int { try value(type: Int.self) } + public func toBool() throws -> Bool { try value(type: Bool.self) } + public func toArray(of type: T.Type) throws -> [T]{ try value(type: [T].self) } + public func toObject(of type: T.Type) throws -> T { try value(type: T.self) } }