SwiftUIでファイルや画像を読み込む処理を行うときに便利なのが loadTransferable(type:) です。
これは PhotosPicker や DropDelegate など、ユーザーが選択・ドロップしたデータから、画像やテキストなどを取り出すために使われる非同期メソッドです。
この記事では loadTransferable(type:) の基本的な意味や仕組み、使い方、活用シーン、注意点までをわかりやすく丁寧に解説します。
loadTransferable(type:) とは?
loadTransferable(type:) は、Transferable に準拠した型(画像・URL・テキストなど)を、ユーザーが選択またはドロップしたデータから非同期に読み込むためのメソッドです。
PhotosPickerItem構造体のインスタンスメソッドの1つとして定義されています。
このメソッドは async/await に対応しており、非同期に安全かつシンプルに書けるのが特徴です。
|
1 2 |
func loadTransferable<T>(type: T.Type) async throws -> T? where T : Transferable |
引数には Transferable に準拠した型(例:Image, Data, URL, String, CustomStruct など)を指定します。
具体例:PhotosPicker で選択した画像を読み込む
具体例でloadTransferable(type:)の使い方を確認してみましょう!
|
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) } } } } } |
この例では、PhotosPickerItem から画像データを loadTransferable(type: Data.self) を使って非同期に読み込んでいます。
最終的に、それを UIImage 経由で SwiftUI.Image に変換して、imageプロパティに格納しています。
loadTransferable(type:) の活用シーン
loadTransferable(type:) はファイルや画像を扱う多くのシーンで活躍します。
- ユーザーが画像やファイルを選択したときに、その中身をアプリに取り込む
- ドラッグ&ドロップでファイルを受け取る場面
Transferableに準拠した独自型をデコード(たとえば独自の構造体を読み込む)する場面
このように、ユーザーが操作によってアプリに渡したデータを柔軟に受け取れるのが強みです。
単純な画像読み込みにとどまらず、ファイル共有や独自形式の処理まで幅広く対応できるのが、このメソッドが重宝される理由です。
loadTransferable(type:) を使うときの注意点
便利な一方で、loadTransferable(type:) を利用する際にはいくつかの制約や注意点があります。
特に非同期処理や型の制約について理解しておくことが重要です。
loadTransferable(type:)の呼び出しにはawaitが必要なので、非同期コンテキストで使用する必要があります(Task {}またはasync関数内)- 読み込み失敗に備えて
try?やdo-catchを使ってエラーハンドリングするのが安全です - デコード先の型は
Transferableに準拠している必要があります。独自型を扱うには明示的な準拠が必要です
このポイントを押さえておけば、想定外のエラーを防ぎつつ、アプリの中で安定したデータ取得処理を実装できます。
まとめ
今回は loadTransferable(type:) について詳しく紹介しました。
loadTransferable(type:)は、画像・テキスト・データなどを非同期で読み込むためのメソッドPhotosPickerItemなどからユーザーが選んだデータを読み取る際に使うData.selfやURL.selfなど、Transferable準拠型を指定して読み込める- 非同期で安全にデータを取り出せるため、UIをブロックせず快適な処理が可能
- 画像読み込みやファイル共有、ドロップ対応など幅広いシーンで使える
ファイルや画像を扱う場面では、SwiftUIで最も標準的かつ推奨されるデータ取得方法です。
まずは PhotosPicker で画像を読み込むところから試してみて、ファイルや独自型にも活用の幅を広げていきましょう。