面试题答案
一键面试在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()
-
创建URL:
- 首先将请求的URL字符串转换为
URL
对象,若转换失败,输出错误信息并返回。
- 首先将请求的URL字符串转换为
-
创建任务:
- 使用
URLSession.shared.dataTask(with:completionHandler:)
方法创建一个数据任务。completionHandler
在请求完成时被调用,传入三个参数:data
(请求返回的数据)、response
(包含服务器响应信息)、error
(请求过程中出现的错误)。
- 使用
-
错误处理:
- 检查
error
是否为nil
,如果不为nil
,输出错误信息。 - 检查
data
是否存在,若不存在也直接返回。
- 检查
-
处理响应:
- 将
response
转换为HTTPURLResponse
,检查HTTP状态码是否在200到299之间,表示请求成功。 - 若状态码正确,尝试将返回的
data
进行JSON序列化,若序列化成功则处理数据,若失败则输出序列化错误信息。 - 若状态码不在成功范围内,输出状态码错误信息。
- 将
-
启动任务:
- 调用
task.resume()
启动数据任务。
- 调用