🥵

Photos Pickerで選択された写真の一つ前の物が表示されるワケ

2024/04/02に公開

swiftUIでPhotosPickerを実装してる際にPickerで選択したにも関わらずうまく表示されず、一つ前の写真が表示されてしまう、、、

.swift
PhotosPicker(selection: $selectedItem) {
                    if selectedItem != nil {
                        Image(uiImage: selectedImage)
                            .resizable()
                            .scaledToFit()
                            .frame(width: 200, height: 200)
                            .cornerRadius(6)
                            .padding()
                    } else {
                        HStack {
                            Image(systemName: "photo.fill")
                                .resizable()
                                .scaledToFit()
                                .frame(width: 40, height: 40)
                                .cornerRadius(6)
                                .padding()
                            Spacer()
                        }
                    }
                }
                .onChange(of: selectedItem) { item, _ in
                    Task {
                        guard let data = try? await item?.loadTransferable(type: Data.self) else { return }
                        guard let pickedImage = UIImage(data: data) else { return }
                        selectedImageData = data
                        selectedImage = pickedImage
                    }
                }

見直してみると簡単なミスでした。
正しくはこちら。

.swift
.onChange(of: selectedItem) { _, item in
                    Task {
                        guard let data = try? await item?.loadTransferable(type: Data.self) else { return }
                        guard let pickedImage = UIImage(data: data) else { return }
                        selectedImageData = data
                        selectedImage = pickedImage
                    }
                }

公式documentを見てみると

.onchange(of: ~) { oldState, newState in}

となっているので,oldStateをアンダースコアにするべきだった。

公式ドキュメントを読むのは本当に大切、、、

Jboy王国メディア

Discussion