見出し画像

New SwiftUI - WWDC22- PhotosPicker

写真の選択ツールも新しくなっています。

最小のコードは以下となるようです。

  @State private var selectedImage: [PhotosPickerItem]=[]

   var body: some View {    

   PhotosPicker(
                selection: $selectedImage,
                matching: .images,
                photoLibrary: .shared()) {
                    Image(systemName: "photo.fill")
                    .font(.largeTitle)
                }
}


この記事にあるコードは写真を選択しても選んだ写真が表示されません。

以下のフォーラムで提示されているコードを参考に少し改修にてみます。

監修後のコードは

struct ContentView: View {

    @State private var selectedImage: [PhotosPickerItem] = []
    @State private var newlyPickedImage: Image?

    var body: some View {

        Form {

            PhotosPicker("Pick a new background image", selection: $selectedImage, matching: .images)
                .onChange(of: selectedImage) { selectedImage in
                    if let selectedImage = selectedImage.first {
                        selectedImage.loadTransferable(type: Image.self) { result in
                            switch result {
                            case .success(let success):
                                if let success {
                                    self.newlyPickedImage = success
                                }
                            case .failure(let error):
                                fatalError(error.localizedDescription)
                            }
                        }
                    }
                }

            if let newlyPickedImage {
                newlyPickedImage
                    .resizable()
                    .scaledToFit()
            }
        }
    }
}

変数宣言で配列にしました。

@State private var selectedImage: [PhotosPickerItem] = []

そして

.onChange(of: selectedImage) { selectedImage in
   if let selectedImage = selectedImage.first {
     selectedImage.loadTransferable(type: Image.self) { result in
}}}

selectedImage.firstの.firstは条件検索をする場合に先頭から行う場合に使います。

次に、エラー処理の部分を以下に変更しています。

case .failure(let error):
             fatalError(error.localizedDescription)


この記事が気に入ったらサポートをしてみませんか?