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
 | |
|     }
 | |
| }
 |