2016-07-14 7 views
27

मैंने कुछ कोड है जो नए iOS 10/स्विफ्ट 3 NSData प्रतिस्थापन रिटर्न टाइप (?): डेटाक्या स्विफ्ट 3 के 'डेटा' प्रकार के लिए एक लिखने के लिए समतुल्य है?

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

मैं डिस्क के लिए इस छवि लिखना चाहते हैं, लेकिन NSData के writeToFile: विधि इस वर्ग के लिए मौजूद नहीं है । इसमें writeToURL: विधि है, लेकिन यह फ़ाइल पथ (और घटक जोड़ना) के साथ काम नहीं कर रहा है।

किसी को भी स्पष्ट कर सकते हैं कि कैसे मैं अब इस रूप में स्विफ्ट 2 में मामला हुआ करता था क्या करना होगा,:

jpegData.writeToFile(imagePath, atomically: true) 

धन्यवाद!

उत्तर

68

write(to: fileURL) का उपयोग करें।

उदाहरण के लिए:

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

या, यदि आप वास्तव में एक path साथ फंस रहे हैं, कि एक URL में बदलने का:

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

लेकिन, आम तौर पर, यह भर URL संदर्भ उपयोग को प्राथमिकता दी अपनी आजकल कोड, पथ तारों के उपयोग सेवानिवृत्त।

+1

यह शानदार है! धन्यवाद रोब। और स्विच करने के लिए धन्यवाद .atomic। –

+2

ऐप्पल यूआरएल-आधारित फ़ाइल एपीआई की तरफ बढ़ रहा है और पथ (स्ट्रिंग)-आधारित वाले लोगों को हटा रहा है। –

+0

बड़े पैमाने पर, हाँ, लेकिन कुछ विषम अपवादों के साथ (उदाहरण के लिए ['UIImage (contentOfFile:)'] (https://developer.apple.com/documentation/uikit/uiimage/1624112-init), लेकिन कोई फ़ाइल यूआरएल प्रस्तुति नहीं है) । – Rob

संबंधित मुद्दे