MST
星途 面试题库

面试题:Swift网络编程中的URLSession使用

请描述在Swift中如何使用URLSession进行一个简单的GET请求,并处理返回的数据,包括可能出现的错误处理。
12.1万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

在Swift中使用URLSession进行简单的GET请求并处理返回数据及错误,示例代码如下:

let urlString = "https://example.com/api/data"
guard let url = URL(string: urlString) else {
    print("Invalid URL")
    return
}

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    guard let data = data, error == nil else {
        if let error = error {
            print("Request error: \(error)")
        }
        return
    }
    
    if let httpResponse = response as? HTTPURLResponse {
        if (200...299).contains(httpResponse.statusCode) {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print("Successfully retrieved data: \(json)")
            } catch let jsonError {
                print("JSON serialization error: \(jsonError)")
            }
        } else {
            print("HTTP status code error: \(httpResponse.statusCode)")
        }
    }
}

task.resume()
  1. 创建URL

    • 首先将请求的URL字符串转换为URL对象,若转换失败,输出错误信息并返回。
  2. 创建任务

    • 使用URLSession.shared.dataTask(with:completionHandler:)方法创建一个数据任务。completionHandler在请求完成时被调用,传入三个参数:data(请求返回的数据)、response(包含服务器响应信息)、error(请求过程中出现的错误)。
  3. 错误处理

    • 检查error是否为nil,如果不为nil,输出错误信息。
    • 检查data是否存在,若不存在也直接返回。
  4. 处理响应

    • response转换为HTTPURLResponse,检查HTTP状态码是否在200到299之间,表示请求成功。
    • 若状态码正确,尝试将返回的data进行JSON序列化,若序列化成功则处理数据,若失败则输出序列化错误信息。
    • 若状态码不在成功范围内,输出状态码错误信息。
  5. 启动任务

    • 调用task.resume()启动数据任务。