URL 返回nil 以及urlhash处理

在Swift项目中,遇到URL在特定系统版本返回nil的问题,特别是当URL不包含中文字符时。为避免此问题,建议使用`addingPercentEncoding(withAllowedCharacters:)`进行编码和`removingPercentEncoding`进行解码。对于带有#(hash)的URL,可以直接转换为URL对象,否则应先进行百分号编码。提供了一个扩展方法,用于将字符串安全地转换为URL对象,确保了URL的正确处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目实践中,发现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
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值