You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:05:22