在异步函数上同时获取进度和错误操作
Posted
技术标签:
【中文标题】在异步函数上同时获取进度和错误操作【英文标题】:Get Progress and Error operations with the same time on Async functions 【发布时间】:2018-05-29 06:09:44 【问题描述】:我在 Home VC 中使用 Alamofire 上传了一个文件。但是在类函数中上传函数。所以我没有得到进度操作。我想我必须编写委托方法。
有人会帮助我吗?
我的问题在 ViewController 中!!!
在 SendPhoto.class 中
class SendPhoto
func send()
Alamofire.upload(
multipartFormData: multipartFormData in
...
,
to: "",
headers:headers,
encodingCompletion: encodingResult in
switch encodingResult
case .success(let upload, _, _):
upload.uploadProgress progress in
print(progress.fractionCompleted)
upload.responseJSON response in
case .failure(let encodingError):
print("File Upload Error")
print(encodingError)
)
在 ViewController 中
class HomepageVC: UIViewController ..
override func viewDidLoad()
super.viewDidLoad()
@IBAction func sendAction(_ sender: Any)
SendPhoto().send()
// I want to keep this function progress and print to a label or etc. !!!
【问题讨论】:
您需要分享更多细节(例如一些代码或方案) 【参考方案1】:但是你的问题没有完成,所以假设
Alamofire 在除多部分请求之外的任何上传请求上返回 UploadRequest 对象
上传请求有属性progress
/// The progress of fetching the response data from the server for the request.
open var progress: Progress return dataDelegate.progress
可用于跟踪上传进度
编辑
你必须通过闭包将数据传递给你的视图控制器
这是你的方法
private func uploadAnyThing (progress:@escaping ((Progress) -> Void) , completed:@escaping ((_ success:Bool,_ error:Error?) -> Void))
Alamofire.upload(multipartFormData: (data) in
, to: "test.com") (result) in
switch (result)
case .success(let request, _, _):
request.uploadProgress(closure: (prog) in
progress(prog)
)
request.responseJSON(completionHandler: (res) in
completed(true,nil)
)
case .failure(let error) :
completed(false,error)
break
你可以得到它
func test ()
uploadAnyThing(progress: (progres) in
print(progres.fractionCompleted)
) (success, error) in
【讨论】:
以上是关于在异步函数上同时获取进度和错误操作的主要内容,如果未能解决你的问题,请参考以下文章