编辑/更新: Xpre 11.5•Swift 5.2
import UIKitimport AVFoundationclass ViewController: UIViewController { var player: AVPlayer! override func viewDidLoad() { super.viewDidLoad() let alarm = URL(string: "https://www.ringtonemobi.com/storage/upload/user_id_1/iphone-5-alarm-2016-08-21-01-49-25.mp3")! do { try alarm.download(to: .documentDirectory) { url, error in guard let url = url else { return } self.player = AVPlayer(url: url) self.player.play() } } catch { print(error) } }}import Foundationextension URL { func download(to directory: FileManager.SearchPathDirectory, using fileName: String? = nil, overwrite: Bool = false, completion: @escaping (URL?, Error?) -> Void) throws { let directory = try FileManager.default.url(for: directory, in: .userDomainMask, appropriateFor: nil, create: true) let destination: URL if let fileName = fileName { destination = directory .appendingPathComponent(fileName) .appendingPathExtension(self.pathExtension) } else { destination = directory .appendingPathComponent(lastPathComponent) } if !overwrite, FileManager.default.fileExists(atPath: destination.path) { completion(destination, nil) return } URLSession.shared.downloadTask(with: self) { location, _, error in guard let location = location else { completion(nil, error) return } do { if overwrite, FileManager.default.fileExists(atPath: destination.path) { try FileManager.default.removeItem(at: destination) } try FileManager.default.moveItem(at: location, to: destination) completion(destination, nil) } catch { print(error) } }.resume() }}原始答案
Xpre 8.3.2•Swift 3.1
if let audioUrl = URL(string: "http://freetone.org/ring/stan/iPhone_5-Alarm.mp3") { // create your document folder url let documentsUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) // your destination file url let destination = documentsUrl.appendingPathComponent(audioUrl.lastPathComponent) print(destination) // check if it exists before downloading it if FileManager.default.fileExists(atPath: destination.path) { print("The file already exists at path") } else { // if the file doesn't exist // just download the data from your url URLSession.shared.downloadTask(with: audioUrl, completionHandler: { (location, response, error) in // after downloading your data you need to save it to your destination url guard let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200, let mimeType = response?.mimeType, mimeType.hasPrefix("audio"), let location = location, error == nil else { return } do { try FileManager.default.moveItem(at: location, to: destination) print("file saved") } catch { print(error) } }).resume() }}


