Gau*_*pta 4 ios nsurlsession swift
我使用转换图像到base64上传多个图像到服务器,并在API中发送图像作为参数.但是当我们一次又一次地调用api然后如何停止api调用按钮点击时.我使用下面的代码来调用API.
提前致谢
let urlPath: String = "URL"
let url: URL = URL(string: urlPath)!
var request1 = URLRequest(url: url)
request1.httpMethod = "POST"
let stringPost="imgSrc=\(image)"
let data = stringPost.data(using: String.Encoding.utf8)
// print("data\(data)")
request1.httpBody=data
request1.timeoutInterval = 60
let _:OperationQueue = OperationQueue()
let task = session.dataTask(with: request1){data, response, err in
do
{
if data != nil
{
print("data\(String(describing: data))")
if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary
{
DispatchQueue.main.async
{
print("json\(jsonResult)")
}
}
}
catch let error as NSError
{
DispatchQueue.main.async
{
print("error is \(error)")
print("error desc \(error.localizedDescription)")
}
}}
task.resume()
Run Code Online (Sandbox Code Playgroud)
Yun*_*HEN 13
将对象task作为全局变量,然后您可以通过以下方式取消它:
task.cancel()
Run Code Online (Sandbox Code Playgroud)
或者,如果对象session是URLSession实例,则可以通过以下方式取消它:
session.invalidateAndCancel()
Run Code Online (Sandbox Code Playgroud)
如果您不想在有任何先前下载正在进行的情况下再次允许 API 调用,您可以执行以下操作,
使您的任务(URLSessionDataTask 类型)变量作为类中的全局变量,如下所示,
let task = URLSessionDataTask()
Run Code Online (Sandbox Code Playgroud)
然后在您的按钮操作上通过检查任务下载状态来执行以下操作,
func uploadButtonPressed() {
if task.state != .running {
// Make your API call here
} else {
// Dont perform API call
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 URLSessionDataTask 类提供的以下状态,例如运行,并根据需要执行相应的操作,
public enum State : Int {
case running
case suspended
case canceling
case completed
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8556 次 |
| 最近记录: |