微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/swift/320846.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐