Swift中url的处理

   OC:
    NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    
   Swift:
    let encodedString = urlString.addingPercentEscapes(using: .utf8)

此方法已过期

   OC:
    NSString* encodedString = [urtString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    
   Swift:
    let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

此方法会把**#被转码成了%23**

let charSet = CharacterSet.urlQueryAllowed as! NSMutableCharacterSet
charSet.addCharacters(in: "#")
let encodingString = urlStr.addingPercentEncoding(withAllowedCharacters: charSet as CharacterSet)

问题是出在let charSet = CharacterSet.urlQueryAllowed as! NSMutableCharacterSet这一行,在swift语言中,Foundation框架中的很多class都重新用struct重写了,比如NSString和String,NSUrl和URL,如果要使用类似于OC一些特性,有时候需要as来强转成对应的NS开头的类。强转的过程中,CharacterSet应该转成NSCharacterSet,而不应该是NSMutableCharacterSet,也就是说子类指针指向了父类对象,父类里面没有子类的方法,所以执行charSet.addCharacters(in: “#”)的时候,无法正确添加。

正确的写法

方法一:

let charSet = CharacterSet.urlQueryAllowed as NSCharacterSet
let mutSet = charSet.mutableCopy() as! NSMutableCharacterSet
mutSet.addCharacters(in: "#")
let encodingURL = urlStr.addingPercentEncoding(withAllowedCharacters: mutSet as CharacterSet)

方法二:

let charSet = NSMutableCharacterSet()
charSet.formUnion(with: CharacterSet.urlQueryAllowed)
charSet.addCharacters(in: "#")
let encodingURL = urlStr.addingPercentEncoding(withAllowedCharacters: charSet as CharacterSet)

方法三:

var charSet = CharacterSet.urlQueryAllowed
charSet.insert(charactersIn: "#")
let encodingURL = urlStr.addingPercentEncoding(withAllowedCharacters: charSet )

猜你喜欢

转载自blog.csdn.net/qq_28091923/article/details/86544255