Array of multiple URL's NSFileManager Swift

后端 未结 1 1733
再見小時候
再見小時候 2020-12-06 04:13

How would I go about adding multiple URL\'s? I wonder how I can set that up into an array with swift.

if let audioUrl = NSURL(string: \"http://freetone.org/         


        
1条回答
  •  再見小時候
    2020-12-06 04:24

    In this case I think you should use NSURLSession.sharedSession().dataTaskWithURL to do multiple downloads from your links but keeping the download operation asynchronous. You need to add a callback block to it. You should do as follow:

    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")
    }
    

    0 讨论(0)
提交回复
热议问题