使用value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
无法保证URL 编码成功,于是我参考 Alamofire 的URL编码如下:
static@H_502_7@ func get@H_502_7@( _ url: String,parameters: [String: Any],completionHandler: @escaping (NSError?,JSON) -> Void) {
var@H_502_7@ urlStr = url
var@H_502_7@ flag = true@H_502_7@
let@H_502_7@ generalDelimitersToEncode = ":#[]@"@H_502_7@ // does not include "?" or "/" due to RFC 3986 - Section 3.4@H_502_7@
let@H_502_7@ subDelimitersToEncode = "!$&'()*+,;="@H_502_7@
var@H_502_7@ allowedCharacterSet = CharacterSet.urlQueryAllowed
allowedCharacterSet.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)"@H_502_7@)
for@H_502_7@ ( key,value@H_502_7@) in@H_502_7@ parameters {
var@H_502_7@ anyValue: Any = value@H_502_7@
if@H_502_7@ let@H_502_7@ value@H_502_7@ = value@H_502_7@ as@H_502_7@? String{
anyValue = value@H_502_7@.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? ""@H_502_7@
}
if@H_502_7@ flag{
flag = false@H_502_7@
urlStr += "?"@H_502_7@ + key + "=\(anyValue)"@H_502_7@
}else@H_502_7@{
urlStr += "&"@H_502_7@ + key + "=\(anyValue)"@H_502_7@
}
}
if@H_502_7@ let@H_502_7@ url = URL.init(string@H_502_7@: urlStr){
var@H_502_7@ request = URLRequest(url: url)
request.cachePolicy = .reloadIgnoringLocalCacheData
URLSession.shared.dataTask(with: request,completionHandler: { (data,response,err) in@H_502_7@
if@H_502_7@ let@H_502_7@ err = err{
completionHandler(err as@H_502_7@ NSError,JSON.null@H_502_7@ )
}else@H_502_7@{
// if let json = try? JSONSerialization.jsonObject(with: data!,options: [.allowFragments,.mutableContainers,.mutableLeaves]) as? [String: Any] {@H_502_7@
if@H_502_7@ let@H_502_7@ data = data {
let@H_502_7@ json = JSON.init(data: data)
guard let@H_502_7@ code = json["code"@H_502_7@].int@H_502_7@,let@H_502_7@ msg = json["msg"@H_502_7@].string@H_502_7@ else@H_502_7@{
completionHandler(NSError(domain: ""@H_502_7@,code: 1@H_502_7@,userInfo: nil),JSON.null@H_502_7@)
return@H_502_7@
}
if@H_502_7@ code != 10000@H_502_7@ {
completionHandler(NSError(domain: msg,code: code,JSON.null@H_502_7@ )
}else@H_502_7@{
completionHandler(nil,json["data"@H_502_7@])
}
}
}
})
.resume()
}
}