55 lines
1.5 KiB
Swift
55 lines
1.5 KiB
Swift
|
|
//
|
||
|
|
// 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
|
||
|
|
}
|
||
|
|
}
|