在 Swift 3 中使用 Alamofire 4 中的 SessionManager 下载音频文件

Posted

技术标签:

【中文标题】在 Swift 3 中使用 Alamofire 4 中的 SessionManager 下载音频文件【英文标题】:Download a Audio file using SessionManager in Alamofire 4 in Swift 3 【发布时间】:2016-10-15 09:24:00 【问题描述】:

在 alomofire 3.5 中,以下代码运行良好

self.sessionManager.download(.GET, AppConstants.musicFileURL + musicFilename, destination:  (url, response) -> NSURL in
        let fileManager = NSFileManager.defaultManager()
        let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
        let fileUrl = directoryURL.URLByAppendingPathComponent(musicFilename)
        return fileUrl
      )
    .progress  bytesRead, totalBytesRead, totalBytesExpectedToRead in
      self.percentageDownloaded[exhibitId]![artworkId] = (Double(totalBytesRead) ,Double(totalBytesExpectedToRead))
      let meanPercentageDone = self.calculatePercentageDoneForExhibit(exhibitId, artworkArray: self.artworkArray)
      let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
      appDelegate.notifyDownloadProgress(meanPercentageDone)
    
    .response  _, _, _, _ in

      NSLog("Completed downloading audio file,%@ , for artwork %@", musicFilename, artworkId)
      if DataManager.saveMusicDownloadComplete(artworkId, exhibitId: exhibitId)
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appDelegate.notifyMusicDownloadsComplete(exhibitId)
        self.percentageDownloaded[exhibitId] = [String: (Double, Double)?]()
        NSLog("when all music files have been downloaded")
      
  

如何将上述代码迁移到 Alamofire 4。在迁移文档中看不到任何 cmets。

【问题讨论】:

试试看:raywenderlich.com/121540/alamofire-tutorial-getting-started @JamshedAlam,本教程适用于 Swift 2.2。可悲的是不是 Swift 3 可以转成swift 3 @JamshedAlam,是的,我做到了 【参考方案1】:
let destination: DownloadRequest.DownloadFileDestination =  _, _ in
    var documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

    documentsURL.appendPathComponent(musicFilename)
    return (documentsURL, [.removePreviousFile])


Alamofire.download(AppConstants.musicFileURL + musicFilename, to: destination)


    .downloadProgress  progress in
        print("Download Progress: \(progress.fractionCompleted)")
    

    .responseString(completionHandler:  (response) in
        print("Success: \(response.result.isSuccess)")
        print("Response String: \(response.result.value)")

    )

我更改为Alamofire.download,而不是在SessionManager 中下载

【讨论】:

如果我想使用 SessionManager 来获得后台功能,我该如何让它工作? github.com/Alamofire/Alamofire/blob/master/Documentation/…看看

以上是关于在 Swift 3 中使用 Alamofire 4 中的 SessionManager 下载音频文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中使用 Alamofire 4 中的 SessionManager 下载音频文件

Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析

使用 Swift 3 和 Alamofire 4 后没有得到响应

使用 Swift 3 的 Alamofire 4.0 出现“没有成员”错误

如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?

Swift 3 / Alamofire 4:在 TableView 上使用 ID 获取数据