2016-07-14 21 views
27

Tôi đã một số mã mà trả về iOS 10/Swift 3 NSData thay thế mới gõ (?): Dữ liệuCó tương đương writeToFile cho loại 'Dữ liệu' của Swift 3 không?

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

Tôi muốn viết hình ảnh này vào đĩa, tuy nhiên phương pháp writeToFile: NSData là không có mặt cho lớp này . Nó có phương thức writeToURL:, nhưng điều đó dường như không hoạt động với đường dẫn tệp (và thành phần phụ thêm).

bất cứ ai có thể làm rõ thế nào bây giờ tôi sẽ làm điều này, như được sử dụng phải là trường hợp trong Swift 2:

jpegData.writeToFile(imagePath, atomically: true) 

Cảm ơn!

Trả lời

68

Sử dụng write(to: fileURL).

Ví dụ:

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

Hoặc, nếu bạn thực sự đang mắc kẹt với một path, chuyển đổi đó để một URL:

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

Nhưng, nói chung, đó là thích hợp hơn để sử dụng tài liệu tham khảo URL suốt của bạn mã ngày nay, gỡ bỏ việc sử dụng các chuỗi đường dẫn.

+1

Điều này thật tuyệt vời! Cảm ơn Rob. Và cảm ơn vì đã chuyển sang .atomic. –

+2

Apple dường như đang chuyển sang API tệp dựa trên URL và không dùng nữa (?) Đường dẫn dựa trên đường dẫn (Chuỗi). –

+0

Rất lớn, vâng, nhưng với một số ngoại lệ lạ (ví dụ: ['UIImage (contentsOfFile:)'] (https://developer.apple.com/documentation/uikit/uiimage/1624112-init), nhưng không có tệp URL hiển thị) . – Rob

Các vấn đề liên quan