Swift|Swift 重构(URL 参数增删改查)
遇到 url query items 为 nil 的问题,解决方法:对链接进行编码即可:
:
let aString = "链接"
let aUrl = NSURL(string: aString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
DDLog(aUrl?.queryParameters)
【Swift|Swift 重构(URL 参数增删改查)】URL 参数增删改查
let absoluteString = "iop://Goods?openNames=30027&activeName=960001"
switch absoluteString {
case let value where absoluteString.hasPrefix("iop://Goods"):
DDLog(value)
if var URL = URL(string: value) {
DDLog(URL.queryParameters)URL = URL.appendingQueryParameters(["token": "1111111"])
//URL.appendQueryParameters(["token": "1111111"])
DDLog("append", URL)URL = URL.removingQueryParameter(for: ["token", "activeName"])
//URL.removeQueryParameter(for: ["token", "activeName"])
DDLog("delete", URL)
}default:
break
}//testFunc()[line 146]: iop://Goods?openNames=30027&activeName=960001
//testFunc()[line 148]: Optional(["openNames": "30027", "activeName": "960001"])
//testFunc()[line 152]: append, iop://Goods?openNames=30027&activeName=960001&token=1111111
//testFunc()[line 156]: delete, iop://Goods?openNames=30027
import UIKitpublic extension URLComponents {///查询参数
var queryParameters: [String: String]? {
guard let queryItems = queryItems else { return nil }var dic = [String: String]()
for item in queryItems {
dic[item.name] = item.value
}
return dic
}///查询对应参数值
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 {///查询参数
var queryParameters: [String: String]? {
guard let components = URLComponents(url: self, resolvingAgainstBaseURL: false)
else { return nil }
return components.queryParameters
}///查询对应参数值
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 {///查询参数
var queryParameters: [String: String]? {
return (self as URL).queryParameters
}///查询对应参数值
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)
}}
推荐阅读
- Swift中willSet和didSet的简述
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- Swift|Swift ----viewController 中addChildViewController
- SwiftUI|SwiftUI iOS 瀑布流组件之仿CollectionView不规则图文混合(教程含源码)
- Swift高级应用|Swift高级应用 -01
- Swift5.0|Swift5.0 UITexview的基本使用
- 2018-12-03-新手教程重构思路
- Swift7|Swift7 - 循环、函数