如何在设置URLComponents的percentEncodedPath前验证路径字符串有效性?
解决URLComponents设置percentEncodedPath崩溃的问题
当你给percentEncodedPath传入未正确完成百分比编码的字符串(比如示例里带空格的路径)时,会触发崩溃——因为该属性要求输入必须是已完成合法百分比编码的字符串,未编码的特殊字符(如空格)属于非法输入。以下是几种实用的处理方案:
方案1:用do-catch捕获错误(直接判断合法性)
设置percentEncodedPath时会抛出错误,你可以通过do-catch块捕获异常,以此判断字符串是否合法:
var urlComponents = URLComponents() let targetPath = "/some failing path/" do { try urlComponents.percentEncodedPath = targetPath // 路径合法,继续后续操作 } catch { // 路径非法,这里做错误处理 print("非法路径:\(error.localizedDescription)") // 可选:自动转为合法编码路径(推荐) urlComponents.path = targetPath // path属性会自动完成百分比编码 }
方案2:提前验证路径合法性
封装一个工具函数,通过尝试设置临时URLComponents的percentEncodedPath来判断输入是否合法:
func isValidPercentEncodedPath(_ path: String) -> Bool { var tempComponents = URLComponents() return (try? tempComponents.percentEncodedPath = path) != nil } // 使用示例 let testPath = "/some failing path/" if isValidPercentEncodedPath(testPath) { var components = URLComponents() components.percentEncodedPath = testPath } else { print("路径未正确编码,需处理") }
方案3:直接使用path属性(最省心)
如果你不需要手动控制编码逻辑,直接用path属性代替percentEncodedPath即可——这个属性会自动帮你把非法字符(如空格、特殊符号)转换成合法的百分比编码格式,完全避免崩溃:
var urlComponents = URLComponents() urlComponents.path = "/some failing path/" // 自动转成"/some%20failing%20path/"
内容的提问来源于stack exchange,提问作者sweepez
相关产品推荐
相关产品推荐

