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