SwiftUIでユーザーに画像や動画などのメディアを選ばせる際に使うのが PhotosPickerItem
です。
これは PhotosPicker
でユーザーが選択したアイテムを表す型で、画像の読み込みやデータ取得などに使います。
この記事では PhotosPickerItem
の基本的な意味や使い方、画像の取得方法、活用シーン、注意点までをわかりやすく丁寧に解説します。
PhotosPickerItem とは?
PhotosPickerItem
は、SwiftUIの PhotosPicker
でユーザーが選択した画像・動画・Live Photo などの1つのメディア項目を表す構造体です。
このアイテムはメタデータのみを含み、実際の画像やデータ本体は含んでいません。
そのため、表示や加工のためには loadTransferable(type:)
などを使って非同期でデータを読み込む必要があります。
この型は PhotosUI
フレームワークに含まれており、SwiftUIの @State
や @Binding
を通してやり取りされます。
具体例:画像を1枚だけ選んで表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import SwiftUI import PhotosUI struct ContentView: View { @State private var selectedItem: PhotosPickerItem? @State private var image: Image? var body: some View { VStack { if let image = image { image .resizable() .scaledToFit() .frame(height: 200) } PhotosPicker("画像を選択", selection: $selectedItem, matching: .images) } .onChange(of: selectedItem) { newItem in Task { if let data = try? await newItem?.loadTransferable(type: Data.self), let uiImage = UIImage(data: data) { image = Image(uiImage: uiImage) } } } } } |
selectedItem
にユーザーが選んだ PhotosPickerItem
が格納されます。
その後、.loadTransferable(type:)
を使って Data
として画像データを読み込み、UIImage
を経由して Image
に変換しています。
PhotosPickerItemの主なプロパティと機能
PhotosPickerItem
自体はシンプルな構造体で、主に以下のような機能を提供します:
メソッド/プロパティ | 内容 |
---|---|
loadTransferable(type:) |
画像や動画などの実データを非同期で読み込む |
supportedContentTypes |
このアイテムで対応しているUTTypeの一覧(読み込み形式の参考に使える) |
itemIdentifier |
一意の識別子(他のPickerItemと区別するために使える) |
これらを組み合わせることで、画像の表示、保存、変換、分析などに柔軟に対応できます。
PhotosPickerItem の活用シーン
PhotosPickerItem
は、ユーザーが写真ライブラリから選んだメディアをアプリの処理に橋渡しする役割を持ちます。
単純に画像を表示するだけでなく、動画や複数選択、クラウド連携など幅広い用途に使えるのが特徴です。
- ユーザーに画像を1枚選ばせてプロフィール画像に設定
- 選択された動画やLive Photoのデータを非同期に処理
- 複数の
PhotosPickerItem
を配列で扱い、ギャラリー表示やまとめアップロード .loadTransferable(type:)
を通じてURL
,String
,Image
など柔軟な型で読み込み処理
このように、ユーザーが写真ライブラリから何かを選んだ後の「次のアクション」を定義するのに必須の存在です。
PhotosPickerItem を使うときの注意点
便利な一方で、PhotosPickerItem
にはいくつかの制約や使い方のポイントがあります。
これらを理解しておくと、予期せぬ動作やエラーを防ぐことができます。
PhotosPickerItem
単体では画像を直接表示できません。必ず.loadTransferable(type:)
を通じてデータを取得する必要があります。- データ読み込みは非同期(
await
)なので、Task {}
やasync
関数内で呼び出す必要があります - 複数選択を許可している場合は
[PhotosPickerItem]
で管理すること(単数選択との使い分けに注意) - iOS 16以降が必要です(PhotosPicker自体の対応範囲)
- これらを踏まえれば、
PhotosPickerItem
を安全かつ効率的に使えるようになり、アプリのメディア処理機能を安定して提供できます。
まとめ
今回は PhotosPickerItem
について詳しく紹介しました。
PhotosPickerItem
は、PhotosPicker
で選ばれた1つのメディア項目を表す構造体- 実際の画像や動画データは
.loadTransferable(type:)
で非同期に取得する @State
や@Binding
にバインドして選択をトラッキングできる- 画像表示やファイル処理、ユーザー入力への対応など幅広いシーンで活用できる
SwiftUIでユーザーにメディアを選ばせる機能を実装するなら、PhotosPickerItem
は欠かせない構成要素です。
特に非同期でのデータ処理が直感的に書けるので、画像系の機能を作りたいときは積極的に取り入れていきましょう。