3
Help us understand the problem. What are the problem?

posted at

updated at

【Swift】URLから画像を保存する

はじめに

画像を保存する機能を作る機会があったので今後再利用することも考えて記事に残しておきます。

事前設定

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の設定を忘れがち
やってないとクラッシュします

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
3
Help us understand the problem. What are the problem?