jsdw_ios/QuickLocation/Core/Extension/URL+Extension.swift

119 lines
3.3 KiB
Swift

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