🥵
Photos Pickerで選択された写真の一つ前の物が表示されるワケ
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をアンダースコアにするべきだった。
公式ドキュメントを読むのは本当に大切、、、
Discussion