swift URL 编码

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

使用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()
      }
   }

猜你在找的Swift相关文章