swift URL 编码
发布时间:2020-12-14 06:00:35 所属栏目:百科 来源:网络整理
导读:使用 value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" 无法保证URL 编码成功,于是我参考 Alamofire 的URL编码如下: static func get ( _ url: String,parameters: [String: Any],completionHandler: @escaping (NSError?,JSO
使用 static func get( _ url: String,parameters: [String: Any],completionHandler: @escaping (NSError?,JSON) -> Void) {
var urlStr = url
var flag = true
let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
let subDelimitersToEncode = "!$&'()*+,;="
var allowedCharacterSet = CharacterSet.urlQueryAllowed
allowedCharacterSet.remove(charactersIn: "(generalDelimitersToEncode)(subDelimitersToEncode)")
for ( key,value) in parameters {
var anyValue: Any = value
if let value = value as? String{
anyValue = value.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? ""
}
if flag{
flag = false
urlStr += "?" + key + "=(anyValue)"
}else{
urlStr += "&" + key + "=(anyValue)"
}
}
if let url = URL.init(string: urlStr){
var request = URLRequest(url: url)
request.cachePolicy = .reloadIgnoringLocalCacheData
URLSession.shared.dataTask(with: request,completionHandler: { (data,response,err) in
if let err = err{
completionHandler(err as NSError,JSON.null )
}else{
// if let json = try? JSONSerialization.jsonObject(with: data!,options: [.allowFragments,.mutableContainers,.mutableLeaves]) as? [String: Any] {
if let data = data {
let json = JSON.init(data: data)
guard let code = json["code"].int,let msg = json["msg"].string else{
completionHandler(NSError(domain: "",code: 1,userInfo: nil),JSON.null)
return
}
if code != 10000 {
completionHandler(NSError(domain: msg,code: code,JSON.null )
}else{
completionHandler(nil,json["data"])
}
}
}
})
.resume()
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |