ios - 带进度条的简单 URLSession uploadTask

标签 ios swift networking

我完全受困于 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/

相关文章:

ios - UIButton 触摸时不显示突出显示

swift - replacementOccurrences 通过使用选项数组引发错误

swift - Facebook 登录 Xcode 6.4 swift 出错

java - 在 C 中序列化数据

networking - 我可以编写 go 库以供其他语言使用吗?

ios - 如何在自定义方法中访问 UITableViewCell 中的对象?

ios - 如何在 Swift iOS 中将字符串转换为日期字符串?

swift - 如何快速捕获按钮事件类型

c++ - 32 位到 16 位浮点转换

ios - 如何使用 SQL 格式的动态 where 子句创建谓词