119 lines
3.3 KiB
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)
|
|
}
|
|
|
|
}
|