2016-07-14 4 views
27

I新しいiOSの10 /スウィフト3 NSDataの交換を返すいくつかのコードを入力してきた(?):データSwift 3の '​​Data'タイプに相当するwriteToFileはありますか?

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

これは素晴らしいです!おかげでロブ。そして、原子に切り替えることに感謝します。 –

+2

AppleはURLベースのファイルAPIに移行し、パス(String)ベースのAPIを非難しているようです(?)。 –

+0

大抵そうですが、いくつかの奇妙な例外があります(例:['UIImage(contentsOfFile:)'](https://developer.apple.com/documentation/uikit/uiimage/1624112-init)、ファイルURLのレンディションはありません) 。 – Rob

関連する問題