swift URL 编码

前端之家收集整理的这篇文章主要介绍了swift URL 编码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""无法保证URL 编码成功,于是我参考 Alamofire 的URL编码如下:

  1. static func get( _ url: String,parameters: [String: Any],completionHandler: @escaping (NSError?,JSON) -> Void) {
  2.  
  3. var urlStr = url
  4. var flag = true
  5. let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
  6. let subDelimitersToEncode = "!$&'()*+,;="
  7. var allowedCharacterSet = CharacterSet.urlQueryAllowed
  8. allowedCharacterSet.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
  9. for ( key,value) in parameters {
  10.  
  11. var anyValue: Any = value
  12. if let value = value as? String{
  13.  
  14. anyValue = value.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? ""
  15. }
  16.  
  17. if flag{
  18. flag = false
  19. urlStr += "?" + key + "=\(anyValue)"
  20. }else{
  21. urlStr += "&" + key + "=\(anyValue)"
  22. }
  23. }
  24. if let url = URL.init(string: urlStr){
  25. var request = URLRequest(url: url)
  26. request.cachePolicy = .reloadIgnoringLocalCacheData
  27.  
  28. URLSession.shared.dataTask(with: request,completionHandler: { (data,response,err) in
  29.  
  30. if let err = err{
  31.  
  32. completionHandler(err as NSError,JSON.null )
  33. }else{
  34. // if let json = try? JSONSerialization.jsonObject(with: data!,options: [.allowFragments,.mutableContainers,.mutableLeaves]) as? [String: Any] {
  35. if let data = data {
  36. let json = JSON.init(data: data)
  37. guard let code = json["code"].int,let msg = json["msg"].string else{
  38. completionHandler(NSError(domain: "",code: 1,userInfo: nil),JSON.null)
  39. return
  40. }
  41.  
  42. if code != 10000 {
  43.  
  44. completionHandler(NSError(domain: msg,code: code,JSON.null )
  45. }else{
  46.  
  47. completionHandler(nil,json["data"])
  48. }
  49. }
  50. }
  51.  
  52.  
  53. })
  54. .resume()
  55. }
  56. }

猜你在找的Swift相关文章