2016-07-14 32 views
27

mam jakiś kod, który zwraca nowy/wymiany Swift 3 NSData iOS 10 Typ (?): DaneCzy istnieje odpowiednik writeToFile dla typu "Dane" Swift 3?

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

Chcę napisać ten obraz na dysku, jednak writeToFile: metoda NSData nie jest obecny w tej klasie . Ma on metodę writeToURL:, ale wydaje się, że nie działa ona ze ścieżką pliku (i dołączanym komponentem).

Może ktoś wyjaśnić jak bym teraz to zrobić, jak kiedyś sprawę w Swift 2:

jpegData.writeToFile(imagePath, atomically: true) 

Dzięki!

Odpowiedz

68

Użyj write(to: fileURL).

Na przykład:

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

Lub, jeśli naprawdę są skazani na path, przekonwertować do URL:

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

Ale ogólnie, to zaleca się stosowanie URL odniesienia w całym w dzisiejszych czasach, wycofując użycie ciągów ścieżek.

+1

To jest fantastyczne! Dzięki Rob. I dziękuję za przejście na .atomic. –

+2

Wygląda na to, że Apple zmierza w stronę interfejsów API opartych na adresach URL i wycofuje (?) Ścieżki oparte na ścieżce (łańcuchowej). –

+0

W dużym stopniu tak, ale z pewnymi dziwnymi wyjątkami (np. ['UIImage (contentsOfFile:)'] (https://developer.apple.com/documentation/uikit/uiimage/1624112-init), ale bez interpretacji adresów URL plików) . – Rob