2016-02-01 5 views

Odpowiedz

12

ten kod:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { 
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; 
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { 
    NSLog(@"File downloaded to: %@", filePath); 
}]; 
[downloadTask resume]; 

Czy na README dla projektu: https://github.com/AFNetworking/AFNetworking

3

ja zrealizować oryginalne pytanie jest w Obj-C, ale ten pojawia się w wyszukiwarce Google, więc dla nikogo jeszcze na niej i potykając i konieczności wersji Swift odpowiedzi @Lou Franco, to jest tutaj:

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() 

Kilka notatek tutaj:

  • ten jest szybki 3/Swift 4
  • I dodaje zamknięcie progress również (choć print stwierdzenie). Ale oczywiście jest całkiem dobrze przekazać tam nil, tak jak w oryginalnym przykładzie.
  • Istnieją trzy miejsca (oznaczone TODO:) bez obsługi błędów, gdy rzeczy mogą zawieść. Oczywiście powinieneś poradzić sobie z tymi błędami, zamiast po prostu upaść.
+0

dzięki. to działa doskonale –

+0

dziękuje dużo, działa dobrze z szybkim - 4 również –

Powiązane problemy