mi rendo conto la questione originale è in Obj-C, ma questo viene in su in una ricerca su Google, quindi per chiunque altro inciampo su di esso e e che necessitano la versione Swift della risposta di Franco @Lou, eccolo:
let configuration = URLSessionConfiguration.default
let manager = AFURLSessionManager(sessionConfiguration: configuration)
let url = URL(string: "http://example.com/download.zip")! // TODO: Don't just force unwrap, handle nil case
let request = URLRequest(url: url)
let downloadTask = manager.downloadTask(
with: request,
progress: { (progress: Progress) in
print("Downloading... progress: \(String(describing: progress))")
},
destination: { (targetPath: URL, response: URLResponse) -> URL in
// TODO: Don't just force try, add a `catch` block
let documentsDirectoryURL = try! FileManager.default.url(for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: false)
return documentsDirectoryURL.appendingPathComponent(response.suggestedFilename!) // TODO: Don't just force unwrap, handle nil case
},
completionHandler: { (response: URLResponse, filePath: URL?, error: Error?) in
print("File downloaded to \(String(describing: filePath))")
}
)
downloadTask.resume()
paio di note qui:
012.
- Si tratta di Swift 3/Swift 4
- ho aggiunto una chiusura
progress
pure (solo una dichiarazione print
). Ma ovviamente è perfettamente accettabile passare nil
come nell'esempio originale.
- Ci sono tre posizioni (contrassegnate con
TODO:
) senza la gestione degli errori in cui le cose potrebbero fallire. Ovviamente dovresti gestire questi errori, invece di andare in crash.
fonte
2017-08-15 09:24:39
grazie. funziona perfettamente –
grazie mille, funziona bene con swift - 4 anche –