GuruAnalytics_iOS/GuruAnalytics/Classes/Internal/Utility/EncodableExtension.swift

55 lines
1.5 KiB
Swift
Raw Normal View History

//
// EncodableExtension.swift
// Runner
//
// Created by on 2020/5/19.
// Copyright © 2020 Guru. All rights reserved.
//
import Foundation
internal extension Encodable {
func asDictionary() throws -> [String: Any] {
let data = try JSONEncoder().encode(self)
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
throw NSError()
}
return dictionary
}
var dictionary: [String: Any]? {
guard let data = try? JSONEncoder().encode(self) else { return nil }
return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] }
}
var asString: String? {
guard let data = try? JSONEncoder().encode(self) else { return nil }
return String(data: data, encoding: .utf8)
}
}
internal extension String {
func jsonObject() -> [String: Any]? {
guard let data = data(using: .utf8) else {
return nil
}
guard let jsonData = try? JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed) as? [String: Any] else {
return nil
}
return jsonData
}
func jsonArrayObject() -> [[String: Any]]? {
guard let data = data(using: .utf8) else {
return nil
}
guard let jsonData = try? JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed) as? [[String: Any]] else {
return nil
}
return jsonData
}
}