我对URLSession和uploadTask完全感到困惑。实际上,我只想将json上传到Web服务器,并且在上传过程中,应该显示一个简单的进度栏。 我实现了苹果公司提供的方法:https://developer.apple.com/documentation/foundation/url_loading_system/uploading_data_to_a_website
上传正在工作,我得到了回应。.到目前为止,一切都很好,但是我不知道如何在上传过程中显示进度条。我试过的是在调用包含上传任务的方法之前显示进度条
startActivityIndicator()
let jsonPackage = JSONIncident(incident: incident)
jsonPackage.sendToBackend(completion: {
message, error in
//Handle the server response
})
self.activityIndicator.stopAnimating()
UIApplication.shared.endIgnoringInteractionEvents()
我意识到这很愚蠢,因为上传任务在另一个线程中是异步的。
我想我必须使用代理人,但我不知道以哪种方式。例如,如果我实现URLSessionTaskDelegate,则必须实现一堆函数,例如isProxy(),isKind(),isMember等。
能否请您提供一个简单的示例,说明如何在上载任务运行期间显示进度栏? 那太好了! 非常感谢你 问候克里斯
答案 0 :(得分:1)
您需要遵守URLSessionTaskDelegate协议并调用此委托方法:
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
{
var uploadProgress:Float = Float(totalBytesSent) / Float(totalBytesExpectedToSend)
}
然后在进度条中使用uploadProgress变量。
像这样创建会话:
var session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main)
答案 1 :(得分:0)
您可以使用带有swiftyJSON(JSON解析)库的alamofire(用于api调用)来上传JSON。您只需要在调用alamofire api之前调用加载程序,并在获得响应时停止加载程序即可。