表題のような処理がしたくて、URLのextensionを作ってみました。
たぶん、あまり需要はないと思うのですが。笑
環境:
Xcode 12.1 / Swift 5.3
playground
import Foundation
extension URL {
/// URLからクエリパラメータを除去する
/// - Parameter name: パラメータ名
/// - Returns: 新しいURLオブジェクト
func removeQueryItem(_ name: String) -> URL? {
guard var component = URLComponents(url: self, resolvingAgainstBaseURL: false) else {
return nil
}
component.queryItems = component.queryItems?.compactMap { item -> URLQueryItem? in
return item.name == name ? nil : item
}
if let queryItems = component.queryItems, queryItems.isEmpty {
component.queryItems = nil
}
return component.url
}
}
// 使い方
// クエリパラメータ"foo"を削除
let url_1 = URL(string: "https://qiita.com/search?q=swift&foo=bar")
print("\(url_1!.removeQueryItem("foo")!.absoluteString)")
// https://qiita.com/search?q=swift
// アンカーがある場合
let url_2 = URL(string: "https://qiita.com/y-some/items/200db9ac37150effc8ed?foo=var#swift")
print("\(url_2!.removeQueryItem("foo")!.absoluteString)")
// https://qiita.com/y-some/items/200db9ac37150effc8ed#swift
// クエリパラメータがない場合(何もしない)
let url_3 = URL(string: "https://qiita.com/")
print("\(url_3!.removeQueryItem("foo")!.absoluteString)")
// https://qiita.com/