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 .reduce(into: [String: String]()) { (dict: inout [String: String], value: [String]) in
22 dict[value[0]] = value[1]
26 struct ParameterValue {
28 private let rawValue: String?
30 var int: Int? { return rawValue.flatMap { Int($0) } }
31 var double: Double? { return rawValue.flatMap { Double($0) } }
32 var string: String? { return rawValue }
35 guard let _ = rawValue else { return nil }
42 if let s = self.string?.lowercased() {
45 case "true", "yes", "t", "y": return true
53 var array: [ParameterValue] {
55 return rawValue?.components(separatedBy: ",").map { ParameterValue($0) } ?? []
57 var integerArray: [Int] {
59 return array.compactMap { $0.int }
62 var valid: Bool { return rawValue != nil }
64 init(_ rawValue: String?) {
66 self.rawValue = rawValue
72 private let rawValue: [String: String]
74 init(_ rawValue: [String: String]) {
76 self.rawValue = rawValue
79 init?(_ request: URLRequest) {
81 guard let paramList = parseParameter(request) else { return nil }
86 subscript(_ key: String) -> ParameterValue {
88 return ParameterValue(rawValue[key])
91 func map<T>(_ transform: (String, String) throws -> T) rethrows -> [T] {
93 return try rawValue.map(transform)
97 extension Parameter: Equatable {
99 public static func == (lhs: Parameter, rhs: Parameter) -> Bool {
100 return lhs.rawValue == rhs.rawValue