Операции Get Progress и Error с одинаковым временем в асинхронных функциях - PullRequest
0 голосов
/ 29 мая 2018

Я загружаю файл с Alamofire в Home VC.Но загрузите func в функцию класса.Так что я не получил операции прогресса.Я думаю, мне нужно написать метод делегата.

Кто-нибудь мне поможет?

Мой вопрос в 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 Ответ

0 голосов
/ 29 мая 2018

Однако ваш вопрос не завершен, поэтому с предположением

Alamofire возвращает объект UploadRequest при любом запросе на загрузку, кроме составного запроса

и загрузкизапрос имеет свойство progress

/// The progress of fetching the response data from the server for the request.
open var progress: Progress { return dataDelegate.progress }

, которое можно использовать для отслеживания загруженного прогресса

EDIT

НеобходимоПередайте данные с закрытием на ваш контроллер вида

Вот ваш метод

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

    }
}
...