// // URL+Extension.swift // dinoGo // // Created by Lin on 2023/3/9. // Copyright © 2023 dino. All rights reserved. // import Foundation extension URL { public var parametersFromQueryString : [String: String]? { guard let components = URLComponents(url: self, resolvingAgainstBaseURL: true), let queryItems = components.queryItems else { return nil } return queryItems.reduce(into: [String: String]()) { (result, item) in result[item.name] = item.value } } } public extension URLComponents { ///查询对应参数值 func queryValue(for key: String) -> String? { return queryItems? .first(where: { $0.name == key })? .value } ///追加查询参数 mutating func appendingQueryParameters(_ parameters: [String: String]) -> URL { queryItems = (queryItems ?? []) + parameters.map { URLQueryItem(name: $0, value: $1) } return url! } ///删除查询参数 mutating func removingQueryParameters(for keys: [String]) -> URL { var dic = [String: String]() queryItems? .filter({ !keys.contains($0.name) }) .forEach({ dic[$0.name] = $0.value }) queryItems = [] + dic.map { URLQueryItem(name: $0, value: $1) } return url! } } public extension URL { ///查询对应参数值 func queryValue(for key: String) -> String? { return URLComponents(string: absoluteString)?.queryValue(for: key) } ///追加查询参数 func appendingQueryParameters(_ parameters: [String: String]) -> URL { var components = URLComponents(url: self, resolvingAgainstBaseURL: true)! return components.appendingQueryParameters(parameters) } ///追加查询参数 mutating func appendQueryParameters(_ parameters: [String: String]) { self = appendingQueryParameters(parameters) } func removingQueryParameters(for keys: [String]) -> URL { var components = URLComponents(url: self, resolvingAgainstBaseURL: true)! return components.removingQueryParameters(for: keys) } ///删除查询参数 mutating func removeQueryParameters(for keys: [String]) { self = removingQueryParameters(for: keys) } } //@objc public extension NSURLComponents { // // ///查询参数 // var queryParameters: [String: String]? { // return (self as URLComponents).queryParameters // } // ///追加查询参数 // func appendingQueryParameters(_ parameters: [String: String]) -> URL { // queryItems = (queryItems ?? []) + parameters.map { URLQueryItem(name: $0, value: $1) } // return url! // } // // ///查询对应参数值 // func queryValue(for key: String) -> String? { // return (self as URLComponents).queryValue(for: key) // } //} @objc public extension NSURL { ///查询对应参数值 func queryValue(for key: String) -> String? { return (self as URL).queryValue(for: key) } ///追加查询参数 func appendingQueryParameters(_ parameters: [String: String]) -> URL { return (self as URL).appendingQueryParameters(parameters) } ///删除查询参数 func removingQueryParameters(for keys: [String]) -> URL { return (self as URL).removingQueryParameters(for: keys) } }