swift URL 编码

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

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

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

猜你在找的Swift相关文章