はじめに
画像を保存する機能を作る機会があったので今後再利用することも考えて記事に残しておきます。
事前設定
Info.plistに以下を設定
NSPhotoLibraryAddUsageDescription
実装
class ViewModel: NSObject, ObservableObject {
// 画像保存
public func savingImage(url: String) {
guard let url = URL(string: url) else {
print("エラー")
return
}
do {
let data = try Data(contentsOf: url)
guard let image = UIImage(data: data) else {
print("エラー")
return
}
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.didFinishSavingImage), nil)
} catch {
print("エラー")
}
}
@objc private func didFinishSavingImage(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
if error == nil {
print("成功")
} else {
print("失敗")
}
}
}
注意点
NSObject
は必須です。
使い方
struct ContentView: View {
@ObservedObject private var viewModel = ViewModel()
var body: some View {
Button("画像保存") {
viewModel.savingImage(url: "https://taishin-miyamoto.com/ShadowBan/image/shadow_ban_icon.png")
}
}
}
おわり
NSPhotoLibraryAddUsageDescription
の設定を忘れがち
やってないとクラッシュします