在项目实践中,发现URL在某些系统版本(​​14.7.1​​​)会返回​​nil​​(即使不存在中文),所以在使用URL的时候最好进行以下编码:

在了解这个之前我们应该先了解一下​​url中#(hash)的含义​​

Swift3之前:

url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

Swift3:

//编码
url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

//解码
url.removingPercentEncoding

对String进行扩展:

extension String{
public func toURL()->URL?{
//如果url带有hash则不处理
let range = range(of: "/#/")
if range != nil{
let Url = URL(string: self)
return Url
}

let eurl = addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
if eurl != nil{
let Url = URL(string: eurl!)
return Url
}
return nil
}
}