iOS Swift:如何将URL查询参数转为路径参数形式?
将查询参数转为路径参数构造正确API请求
修改后的完整代码
// 初始化基础URL组件,去掉末尾斜杠方便后续拼接路径 var urlComponents = URLComponents(string: "https://jsonplaceholder.typicode.com/users")! // 将用户ID作为路径后缀拼接,生成/users/1格式的路径 urlComponents.path += "/\(userId.id)" // 安全解包URL,避免强制解包引发崩溃 guard let url = urlComponents.url else { print("URL构造失败") return } var urlRequest = URLRequest(url: url) urlRequest.httpMethod = "GET" let config = URLSessionConfiguration.default let session = URLSession(configuration: config) print("urlRequest=====\(urlRequest)") session.dataTask(with: urlRequest) { (data, response, error) in guard let data = data else { return } do { let decoder = JSONDecoder() let userRes = try decoder.decode([UserResponse].self, from: data) self.delegate?.UserDetailsSuccess(userDetail: userRes) } catch let error { print("Error: ", error) } }.resume()
关键修改点
- 移除冗余代码:删掉重复的
urlComponents初始化语句,精简逻辑 - 替换参数方式:不再通过
queryItems生成?id=1这类查询参数,而是直接修改urlComponents.path,把用户ID拼接到路径末尾,以此得到符合要求的https://jsonplaceholder.typicode.com/users/1 - 安全解包URL:用
guard let替代原代码中的强制解包!,避免因URL构造失败引发运行时崩溃 - 规范路径拼接:基础URL去掉末尾斜杠,拼接时直接添加
/\(userId.id),避免出现users//1这类无效路径(URLComponents也会自动修复,但规范写法更稳妥)
补充说明
如果直接拼接字符串构造URL(比如"https://jsonplaceholder.typicode.com/users/\(userId.id)")也能实现需求,但用URLComponents的优势在于它会自动处理特殊字符的编码,比如用户ID包含空格、中文等特殊内容时,能保证URL的合法性,避免请求失败。
内容的提问来源于stack exchange,提问作者Sivani Sangameswaran
相关产品推荐
相关产品推荐

