API 调用在 swift 中给出了过时的响应
API call is giving outdated response in swift
我正在 swift 中发出 HTTP get 请求,由于某种原因我收到了过时的响应。我将 Postman 中的响应与我在 Xcode 中打印的响应进行了比较,并且我明白了..
Postman 中的响应 Headers:
响应 Headers 打印在 Xcode 控制台:
查看以绿色突出显示的部分,两个调用是同时进行的。这是我项目的实时 API,由于当前实时数据没有变化,我没有显示 JSON 响应。但是正如您在响应 headers 中看到的那样,Postman 和 Xcode 中字段 "Date" 的值是不同的。当我在 Postman 中执行此操作时,它每次都会给我新的响应时间。但是在 Xcode 我一整天都收到相同的回复。我不知道为什么会这样。在擦除模拟器的内容(或从模拟器中删除应用程序)并再次重新安装项目后,它给了我一个新的更新响应。但是又重复了...
RequestManager 中的代码Class:
import Foundation
class RequestManager {
class func callTheGetAPI(urlString: String, closure: @escaping (Data?)->Void) {
let url = URL.init(string: urlString)
var urlRequest = URLRequest(url: url!)
urlRequest.httpMethod = "GET"
urlRequest.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if (error != nil) {
print(error!.localizedDescription)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse!.allHeaderFields)
closure(data)
}
}
dataTask.resume()
}
}
我的代码 ViewController:
override func viewDidLoad() {
super.viewDidLoad()
getRecommendedData()
}
func getRecommendedData() {
let url = APIManager.API_01
RequestManager.callTheGetAPI(urlString: url, closure: { response in
do {
if (try JSONSerialization.jsonObject(with: response!, options: .mutableContainers) as? [[String : Any]]) != nil{
// print(json)
}
} catch let error {
print(error.localizedDescription)
}
})
}
这就是我所有的人..如果有人知道发生了什么或者我做错了什么..请帮助..
替换下行
var urlRequest = URLRequest(url: url!)
有
var urlRequest = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 60)
来自文档 reloadIgnoringCacheData:指定
URL 加载的数据应从原始源加载。不
现有的本地缓存数据,无论其新鲜度或有效性如何,
应该用于满足 URL 加载请求。
默认使用缓存。
我正在 swift 中发出 HTTP get 请求,由于某种原因我收到了过时的响应。我将 Postman 中的响应与我在 Xcode 中打印的响应进行了比较,并且我明白了..
Postman 中的响应 Headers:
响应 Headers 打印在 Xcode 控制台:
查看以绿色突出显示的部分,两个调用是同时进行的。这是我项目的实时 API,由于当前实时数据没有变化,我没有显示 JSON 响应。但是正如您在响应 headers 中看到的那样,Postman 和 Xcode 中字段 "Date" 的值是不同的。当我在 Postman 中执行此操作时,它每次都会给我新的响应时间。但是在 Xcode 我一整天都收到相同的回复。我不知道为什么会这样。在擦除模拟器的内容(或从模拟器中删除应用程序)并再次重新安装项目后,它给了我一个新的更新响应。但是又重复了...
RequestManager 中的代码Class:
import Foundation
class RequestManager {
class func callTheGetAPI(urlString: String, closure: @escaping (Data?)->Void) {
let url = URL.init(string: urlString)
var urlRequest = URLRequest(url: url!)
urlRequest.httpMethod = "GET"
urlRequest.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if (error != nil) {
print(error!.localizedDescription)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse!.allHeaderFields)
closure(data)
}
}
dataTask.resume()
}
}
我的代码 ViewController:
override func viewDidLoad() {
super.viewDidLoad()
getRecommendedData()
}
func getRecommendedData() {
let url = APIManager.API_01
RequestManager.callTheGetAPI(urlString: url, closure: { response in
do {
if (try JSONSerialization.jsonObject(with: response!, options: .mutableContainers) as? [[String : Any]]) != nil{
// print(json)
}
} catch let error {
print(error.localizedDescription)
}
})
}
这就是我所有的人..如果有人知道发生了什么或者我做错了什么..请帮助..
替换下行
var urlRequest = URLRequest(url: url!)
有
var urlRequest = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 60)
来自文档 reloadIgnoringCacheData:指定 URL 加载的数据应从原始源加载。不 现有的本地缓存数据,无论其新鲜度或有效性如何, 应该用于满足 URL 加载请求。
默认使用缓存。