2016-07-14 69 views
27

Ho un po 'di codice che restituisce il nuovo/sostitutivo Swift 3 NSData iOS 10 tipo (?): DatiEsiste un equivalente writeToFile per il tipo "Dati" di Swift 3?

if let jpegData = UIImageJPEGRepresentation(newImage, 0.8) { ... } 

voglio scrivere questa immagine su disco, ma il metodo di NSData writeToFile: non è presente per questa classe . Ha un metodo writeToURL:, ma non sembra funzionare con un percorso file (e un componente aggiuntivo).

chiunque può chiarire come vorrei ora fare questo, come quello usato per essere il caso in Swift 2:

jpegData.writeToFile(imagePath, atomically: true) 

Grazie!

risposta

68

Utilizzare write(to: fileURL).

Ad esempio:

let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("test.jpg") 

do { 
    try jpegData.write(to: fileURL, options: .atomic) 
} catch { 
    print(error) 
} 

Oppure, se davvero è bloccato con un path, convertire in un URL:

do { 
    try data.write(to: URL(fileURLWithPath: path), options: .atomic) 
} catch { 
    print(error) 
} 

Ma, in generale, è preferibile utilizzare URL riferimenti per tutta la codice al giorno d'oggi, ritirando l'uso delle stringhe di percorso.

+1

Questo è fantastico! Grazie Rob. E grazie per aver fatto il passaggio a .atomic. –

+2

Apple sembra orientarsi verso API di file basate su URL e deprecare (?) I percorsi basati su path (String). –

+0

In gran parte sì, ma con alcune strane eccezioni (ad es. ['UIImage (contentsOfFile:)'] (https://developer.apple.com/documentation/uikit/uiimage/1624112-init), ma nessuna rappresentazione dell'URL del file) . – Rob