From dc77b9c6e5152b61c540bebed54bcb21a9e58b72 Mon Sep 17 00:00:00 2001 From: masakih Date: Tue, 14 Feb 2017 22:02:28 +0900 Subject: [PATCH] =?utf8?q?HMAPIResponse=E3=82=92struct=E3=81=AB=E5=A4=89?= =?utf8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KCD/HMAPIResponse.swift | 77 +++++++++++++++++++++++++++--------------------- KCD/HMJSONReciever.swift | 2 +- 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/KCD/HMAPIResponse.swift b/KCD/HMAPIResponse.swift index c1dac63f..95d5bff0 100644 --- a/KCD/HMAPIResponse.swift +++ b/KCD/HMAPIResponse.swift @@ -8,25 +8,48 @@ import Cocoa -fileprivate func parseJSON(_ data: Data) -> [String:Any]? { - guard let j = try? JSONSerialization.jsonObject(with: data, options: [.allowFragments]), +fileprivate extension Data { + var utf8String: String? { return String(data: self, encoding: .utf8) } +} +fileprivate extension Dictionary { + func apended(_ keyValue: (Key, Value) ) -> Dictionary { + var dict = self + dict[keyValue.0] = keyValue.1 + return dict + } +} + +fileprivate func splitJSON(_ data: Data) -> Data? { + let prefix = "svdata=" + guard let string = data.utf8String, + let range = string.range(of: prefix) + else { + print("data is wrong") + return nil + } + return string[range.upperBound.. [String:Any]? { + guard let data = data, + let j = try? JSONSerialization.jsonObject(with: data, options: [.allowFragments]), let json = j as? [String:Any] else { return nil } return json } -fileprivate func parseParameter(_ string: String) -> [String:String] { - let piar = string.components(separatedBy: "&") - return piar.reduce(Dictionary()) { - var dict = $0 - let p = $1.components(separatedBy: "=") - if p.count == 2 { - dict[p[0]] = p[1] - } - return dict - } + +fileprivate func parseParameter(_ request: URLRequest) -> [String:String]? { + return request + .httpBody? + .utf8String? + .removingPercentEncoding? + .components(separatedBy: "&") + .map { $0.components(separatedBy: "=") } + .filter { $0.count == 2 } + .map { ($0[0], $0[1]) } + .reduce([String:String]()) { $0.apended($1) } } -class HMAPIResponse: NSObject { +struct HMAPIResponse { let api: String let parameter: [String:String] let json: [String:Any] @@ -40,48 +63,34 @@ class HMAPIResponse: NSObject { let argumentArray: [[String:String]] #endif - init?(request: NSURLRequest, data: Data) { + init?(request: URLRequest, data: Data) { date = Date() - let prefix = "svdata=" - guard let string = String(data: data, encoding: .utf8), - string.hasPrefix(prefix) - else { - print("data is wrong") - return nil - } - let start = string.index(string.startIndex, offsetBy: prefix.characters.count) - let jsonString = string[start..