代码之家  ›  专栏  ›  技术社区  ›  Ali Ihsan URAL

在异步函数上同时获取进度和错误操作

  •  -1
  • Ali Ihsan URAL  · 技术社区  · 8 年前

    我上传了一个文件与阿拉莫菲尔在家VC。但在类函数中上载func。所以我没有得到进度操作。我想我必须写委托方法。

    有人会帮我吗?

    我的问题在视图控制器中!!!!

    在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)
                }
        })
    }}
    

    在视图控制器中

    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 回复  |  直到 7 年前
        1
  •  2
  •   Prashant Tukadiya    8 年前

    然而,你的问题还没有完成,所以只是假设而已。

    阿拉莫菲尔 返回 上传请求 除多部分请求外的任何上载请求上的对象

    上载请求具有属性 进步

    /// 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
    
        }
    }