我完全受困于 URLSession 和 uploadTask。实际上我只是想将一个 json 上传到 Web 服务器,并且在上传过程中应该显示一个简单的进度条。 我实现了apple给出的方法: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()
我意识到这很愚蠢,因为上传任务在另一个线程中异步工作。
我想我必须使用委托(delegate),但我不知道用哪种方式。例如,如果我实现 URLSessionTaskDelegate,我必须实现一堆函数,如 isProxy()、isKind()、isMember 等。
能否请您提供一个简单的示例,说明如何在上传任务运行期间显示进度条? 那太好了! 非常感谢 问候克里斯
最佳答案
您需要遵守 URLSessionTaskDelegate 协议(protocol)并调用此委托(delegate)方法:
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
{
var uploadProgress:Float = Float(totalBytesSent) / Float(totalBytesExpectedToSend)
}
然后为您的进度条使用 uploadProgress 变量。
像这样创建你的 session :
var session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main)
关于ios - 带进度条的简单 URLSession uploadTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734504/