升级到 4.0 后 Alamofire 方法不起作用

Posted

技术标签:

【中文标题】升级到 4.0 后 Alamofire 方法不起作用【英文标题】:Alamofire method not work after upgrade to 4.0 【发布时间】:2016-09-28 06:18:18 【问题描述】:
func downloadProgress(bytesRead: Int64, totalBytesRead: Int64,
    totalBytesExpectedToRead: Int64) 
    let percent = Float(totalBytesRead)/Float(totalBytesExpectedToRead)

    dispatch_async(dispatch_get_main_queue(), 
        self.progress.setProgress(percent,animated:true)   
    )
    print("Progress:\(percent*100)%")


func downloadResponse(request: NSURLRequest?, response: NSHTTPURLResponse?,
    data: NSData?, error:NSError?) 
    if let error = error 
        if error.code == NSURLErrorCancelled 
            self.cancelledData = data 
         else 
            print("Failed to download file: \(response) \(error)")
        
     else 
        print("Successfully downloaded file: \(response)")
    


@IBAction func continueBtnClick(sender: AnyObject) 
    if let cancelledData = self.cancelledData 
        self.downloadRequest = Alamofire.download(resumeData: cancelledData,
            destination: destination)

        self.downloadRequest.progress(downloadProgress) 

        self.downloadRequest.response(completionHandler: downloadResponse) 

        self.stopBtn.enabled = true
        self.continueBtn.enabled = false
    

代码在 Alamofire 3.1 上运行良好,但在升级到 Swift 3.0 和 Alamofire 4.0 后无法运行。

以下两行显示错误“no such memeber fo progress”和“no such member of response”

    self.downloadRequest.progress(downloadProgress) self.downloadRequest.response(completionHandler: downloadResponse)

如何解决这两个问题?

谢谢。

【问题讨论】:

【参考方案1】:

您所指的功能在 Alamofire 4.0 中发生了变化。 “无成员”错误的原因是函数调用已更改。根据新文档,这是您应该(可能)进行的调用:

Alamofire.download("https://httpbin.org/image/png")
.downloadProgress  progress in
    print("Download Progress: \(progress.fractionCompleted)")

.responseData  response in
    if let data = response.result.value 
    

根据 Xcode 的新功能(我也使用 Alamofire 4.0,但不使用 .Download):

downloadRequest.downloadProgress(closure:  Request.ProgressHandler)
downloadRequest.responseData(completionHandler: (DownloadResponse<Data>) -> Void)

来源:Alamofire documentation for download progress

【讨论】:

@jdleung 太棒了!我很高兴能帮上忙

以上是关于升级到 4.0 后 Alamofire 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有 MultiPart 表单数据中的参数的图像上传在 Alamofire 4.0 中不起作用

在 Alamofire 4.0 中初始化 SessionManager

将 Alamofire Multipart 方法转换为以前到最新的 4.0 版本,导致多形式零件数据出现问题

使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作

Swift 3.0 迁移后的 Alamofire 错误:“调用中的额外参数”(请求方法)

在 Swift 3.0 (Alamofire 4.4.0) 中的一些请求后,Alamofire 停止工作