5 // Created by Hori,Masaki on 2017/12/12.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 private func parseParameter(_ request: URLRequest) -> [String: String]? {
16 .removingPercentEncoding?
17 .components(separatedBy: "&")
18 .map { $0.components(separatedBy: "=") }
19 .filter { $0.count == 2 }
20 .map { (piar: [String]) -> (String, String) in (piar[0], piar[1]) }
21 .reduce(into: [String: String]()) { (dict: inout [String: String], value: (String, String)) in
23 dict[value.0] = value.1
27 struct ParameterValue {
29 private let rawValue: String?
31 var int: Int? { return rawValue.flatMap { Int($0) } }
32 var double: Double? { return rawValue.flatMap { Double($0) } }
33 var string: String? { return rawValue }
36 guard let _ = rawValue else { return nil }
43 if let s = self.string?.lowercased() {
46 case "true", "yes", "t", "y": return true
54 var array: [ParameterValue] {
56 return rawValue?.components(separatedBy: ",").map { ParameterValue($0) } ?? []
58 var integerArray: [Int] {
60 return array.flatMap { $0.int }
63 var valid: Bool { return rawValue != nil }
65 init(_ rawValue: String?) {
67 self.rawValue = rawValue
73 private let rawValue: [String: String]
75 init(_ rawValue: [String: String]) {
77 self.rawValue = rawValue
80 init?(_ request: URLRequest) {
82 guard let paramList = parseParameter(request) else { return nil }
87 subscript(_ key: String) -> ParameterValue {
89 return ParameterValue(rawValue[key])
92 func map<T>(_ transform: (String, String) throws -> T) rethrows -> [T] {
94 return try rawValue.map(transform)
98 extension Parameter: Equatable {
100 public static func == (lhs: Parameter, rhs: Parameter) -> Bool {
101 return lhs.rawValue == rhs.rawValue