Browse Source

Updated URL percent escaping to only batch on OS's where required.

Christian Noon 10 years ago
parent
commit
2cb2395471
1 changed files with 15 additions and 11 deletions
  1. 15 11
      Source/ParameterEncoding.swift

+ 15 - 11
Source/ParameterEncoding.swift

@@ -212,6 +212,8 @@ public enum ParameterEncoding {
         let allowedCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as! NSMutableCharacterSet
         let allowedCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as! NSMutableCharacterSet
         allowedCharacterSet.removeCharactersInString(generalDelimitersToEncode + subDelimitersToEncode)
         allowedCharacterSet.removeCharactersInString(generalDelimitersToEncode + subDelimitersToEncode)
 
 
+        var escaped = ""
+
         //==========================================================================================================
         //==========================================================================================================
         //
         //
         //  Batching is required for escaping due to an internal bug in iOS 8.1 and 8.2. Encoding more than a few
         //  Batching is required for escaping due to an internal bug in iOS 8.1 and 8.2. Encoding more than a few
@@ -223,21 +225,23 @@ public enum ParameterEncoding {
         //
         //
         //==========================================================================================================
         //==========================================================================================================
 
 
-        let batchSize = 50
-        var index = string.startIndex
-
-        var escaped = ""
+        if #available(iOS 8.3, OSX 10.10, *) {
+            escaped = string.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) ?? string
+        } else {
+            let batchSize = 50
+            var index = string.startIndex
 
 
-        while index != string.endIndex {
-            let startIndex = index
-            let endIndex = index.advancedBy(batchSize, limit: string.endIndex)
-            let range = Range(start: startIndex, end: endIndex)
+            while index != string.endIndex {
+                let startIndex = index
+                let endIndex = index.advancedBy(batchSize, limit: string.endIndex)
+                let range = Range(start: startIndex, end: endIndex)
 
 
-            let substring = string.substringWithRange(range)
+                let substring = string.substringWithRange(range)
 
 
-            escaped += substring.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) ?? substring
+                escaped += substring.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) ?? substring
 
 
-            index = endIndex
+                index = endIndex
+            }
         }
         }
 
 
         return escaped
         return escaped