我将如何添加多个URL?我不知道如何将其快速设置为数组。
if let audioUrl = NSURL(string: "http://freetone.org/ring/stan/iPhone_5-Alarm.mp3") { println("LOADING AUDIO") if let myAudioDataFromUrl = NSData(contentsOfURL: audioUrl){ println("AUDIO LOADED") let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL let destinationUrl = documentsUrl.URLByAppendingPathComponent(audioUrl.lastPathComponent!) println(destinationUrl) if NSFileManager().fileExistsAtPath(destinationUrl.path!) { println("The file already exists at path") } else { if myAudioDataFromUrl.writeToURL(destinationUrl, atomically: true) { println("file saved") } else { println("error saving file") } } } }
在这种情况下,我认为您应该使用NSURLSession.sharedSession()。dataTaskWithURL从链接中进行多次下载,但要保持下载操作异步。您需要向其添加一个回调块。您应该执行以下操作:
let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as NSURL let musicArray:[String] = ["http://freetone.org/ring/stan/iPhone_5-Alarm.mp3","http://freetone.org/ring/stan2/Samsung_Galaxy_S4-SMS.mp3","https://www.sounddogs.com/sound-effects/25/mp3/235178_SOUNDDOGS__al.mp3"] var musicUrls:[NSURL!]! // create a function to start the audio data download func getAudioDataFromUrl(audioUrl:NSURL, completion: ((data: NSData?) -> Void)) { NSURLSession.sharedSession().dataTaskWithURL(audioUrl) { (data, response, error) in completion(data: data) }.resume() } // create another function to save the audio data func saveAudioData(audio:NSData, destination:NSURL) -> Bool { if audio.writeToURL(destination, atomically: true) { println("The file \"\(destination.lastPathComponent!.stringByDeletingPathExtension)\" was successfully saved.") return true } return false } // just convert your links to Urls func linksToUrls(){ musicUrls = musicArray .map() { NSURL(string: $0) } .filter() { $0 != nil } } // create a loop to start downloading your urls func startDownloadingUrls(){ for url in musicUrls { let destinationUrl = documentsUrl.URLByAppendingPathComponent(url.lastPathComponent!) if NSFileManager().fileExistsAtPath(destinationUrl.path!) { println("The file \"\(destinationUrl.lastPathComponent!.stringByDeletingPathExtension)\" already exists at path.") } else { println("Started downloading \"\(url.lastPathComponent!.stringByDeletingPathExtension)\".") getAudioDataFromUrl(url) { data in dispatch_async(dispatch_get_main_queue()) { println("Finished downloading \"\(url.lastPathComponent!.stringByDeletingPathExtension)\".") println("Started saving \"\(url.lastPathComponent!.stringByDeletingPathExtension)\".") if self.saveAudioData(data!, destination: self.documentsUrl.URLByAppendingPathComponent(url.lastPathComponent!) ) { // do what ever if writeToURL was successful } else { println("The File \"\(url.lastPathComponent!.stringByDeletingPathExtension)\" was not saved.") } } } } } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. println("Begin of code") linksToUrls() startDownloadingUrls() println("End of code") }