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

使用模拟数据测试URLSession代理方法

规整后的URLSession代理方法实现

嘿,我来帮你把这两个URLSession代理方法的实现理清楚并规整好——这俩方法可是网络请求里处理数据接收和任务收尾的核心环节。你给出的代码片段已经有了核心逻辑,我把它补全并整理成更易读的完整版本:

首先,我们需要一个实例变量来累加分块接收的数据(因为网络数据可能不是一次性传完的):

private var dataReceived = Data()

1. 接收数据的代理方法

这个方法会在数据分块到达时被调用,我们要做的就是把每次收到的数据追加到之前的缓存里:

public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
    // 累加收到的分块数据
    dataReceived.append(data)
}

2. 任务完成的代理方法

当请求结束(不管成功、失败还是遇到HTTP错误),这个方法会被触发,我们在这里处理错误、HTTP状态码和最终的数据:

public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
    // 先处理网络层面的错误(比如无网络、连接超时等)
    if let error = error {
        print("请求发生错误: \(error.localizedDescription)")
        // 这里可以添加错误回调、弹窗提示等自定义逻辑
        return
    }
    
    // 网络请求成功,解析HTTP响应和数据
    guard let response = task.response as? HTTPURLResponse, !dataReceived.isEmpty else {
        print("无效的响应或无返回数据")
        return
    }
    
    // 根据HTTP状态码分支处理
    switch response.statusCode {
    case 200...299:
        // 成功状态码,处理返回的数据
        print("请求成功,返回数据大小: \(dataReceived.count) bytes")
        // 这里可以解析dataReceived为JSON、模型对象等自定义逻辑
        do {
            let json = try JSONSerialization.jsonObject(with: dataReceived, options: [])
            print("解析后的JSON: \(json)")
        } catch {
            print("JSON解析失败: \(error)")
        }
    case 400...499:
        // 客户端错误(比如参数错误、权限不足等)
        print("客户端错误,状态码: \(response.statusCode)")
        // 可以解析错误信息返回给用户
    case 500...599:
        // 服务器错误
        print("服务器错误,状态码: \(response.statusCode)")
    default:
        print("未知状态码: \(response.statusCode)")
    }
    
    // 重置缓存,为下一次请求做准备
    dataReceived = Data()
}

一些实用提示

  • 要确保你的URLSession实例初始化时设置了正确的代理(比如URLSession(configuration: .default, delegate: self, delegateQueue: nil))
  • dataReceived一定要在每次请求完成后重置,避免不同请求的数据互相污染
  • 如果需要并发处理多个请求,建议用字典来存储每个task对应的数据(比如[URLSessionTask: Data]),避免单个变量的冲突

内容的提问来源于stack exchange,提问作者SwiftyJD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:29:31