向 API 发出重复请求
Making Repeated Requests to API
我知道如何使用 swift 进行常规 API 呼叫。我无法理解的是如何使 API 调用重复直到需要。
我想每隔一秒调用一次API
API 调用代码片段:
let url = URL(string: "https://api.darksky.net/forecast/34eaef38915078ea03c22bb9063bd7ea/37.8267,-122.4233")
let request = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 10)
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: OperationQueue.main)
let task: URLSessionDataTask = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in
if let error = error {
print(error)
} else if let data = data,
let dataDictionary = try! JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary {
print("API Data:")
print(dataDictionary)
}
})
task.resume()
注意:这不是实际的API我会打电话给
理想情况下,对于您提到的金融等软件解决方案,服务器必须支持某种长轮询/websockets 机制,一旦建立连接,只要有更新,服务器就会为客户端提供新值(参考:)
如果服务器不支持:(不是理想的解决方案):
您实际上可以在其中使用递归。在请求的响应(成功和失败)时再次调用相同的函数。这样你就可以不断地进行投票。
请记住保持请求计时器较短(5 或 10 秒而不是 60 秒),这样如果碰巧出现网络问题,您可以快速拨打下一个电话。
我知道如何使用 swift 进行常规 API 呼叫。我无法理解的是如何使 API 调用重复直到需要。
我想每隔一秒调用一次API
API 调用代码片段:
let url = URL(string: "https://api.darksky.net/forecast/34eaef38915078ea03c22bb9063bd7ea/37.8267,-122.4233")
let request = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 10)
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: OperationQueue.main)
let task: URLSessionDataTask = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in
if let error = error {
print(error)
} else if let data = data,
let dataDictionary = try! JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary {
print("API Data:")
print(dataDictionary)
}
})
task.resume()
注意:这不是实际的API我会打电话给
理想情况下,对于您提到的金融等软件解决方案,服务器必须支持某种长轮询/websockets 机制,一旦建立连接,只要有更新,服务器就会为客户端提供新值(参考:)
如果服务器不支持:(不是理想的解决方案): 您实际上可以在其中使用递归。在请求的响应(成功和失败)时再次调用相同的函数。这样你就可以不断地进行投票。
请记住保持请求计时器较短(5 或 10 秒而不是 60 秒),这样如果碰巧出现网络问题,您可以快速拨打下一个电话。