Ausgabe
Ich habe gerade angefangen, Apple Swift-Programmierung für iOS von Android zu lernen. Ich kann jetzt im Grunde Swift-Code lesen und manipulieren und habe auch einige gängige Klassen gelernt, die in der iOS-Swift-Programmierung verwendet werden, aber ich habe immer noch etwas Verwirrung mit der Syntax und allem.
Ich versuche, eine Datei herunterzuladen. Sagen wir einfach, von dieser URL kommend
var url = "http://www.mywebsite.com/myfile.pdf"
in einem Knopfdruck. Vielleicht auch mit visuellem Fortschritt
Durch die Suche hier im Stackoverflow bin ich auf Alamofire gestoßen. Ich könnte es versuchen, aber ich bin mir nicht sicher, ob dies der beste Weg für mich ist, es zu tun.
Daher möchte ich fragen, wie und welche Optionen (iOS7 und iOS8) ich habe, um mein Ziel zu erreichen. Außerdem wären Vor- und Nachteile super!
Lösung
Beispiel-Downloader-Klasse ohne Alamofire:
class Downloader {
class func load(URL: NSURL) {
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = "GET"
let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if (error == nil) {
// Success
let statusCode = (response as NSHTTPURLResponse).statusCode
println("Success: \(statusCode)")
// This is your file-variable:
// data
}
else {
// Failure
println("Failure: %@", error.localizedDescription);
}
})
task.resume()
}
}
So verwenden Sie es in Ihrem eigenen Code:
class Foo {
func bar() {
if var URL = NSURL(string: "http://www.mywebsite.com/myfile.pdf") {
Downloader.load(URL)
}
}
}
Swift 3-Version
Beachten Sie auch, große Dateien auf die Festplatte statt in den Arbeitsspeicher herunterzuladen. siehe `downloadTask:
class Downloader {
class func load(url: URL, to localUrl: URL, completion: @escaping () -> ()) {
let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig)
let request = try! URLRequest(url: url, method: .get)
let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
if let tempLocalUrl = tempLocalUrl, error == nil {
// Success
if let statusCode = (response as? HTTPURLResponse)?.statusCode {
print("Success: \(statusCode)")
}
do {
try FileManager.default.copyItem(at: tempLocalUrl, to: localUrl)
completion()
} catch (let writeError) {
print("error writing file \(localUrl) : \(writeError)")
}
} else {
print("Failure: %@", error?.localizedDescription);
}
}
task.resume()
}
}
Beantwortet von – Devran Cosmo Uenal
Antwort geprüft von – Dawn Plyler (FixError Volunteer)