CSVファイルデータを読みSwiftDataで使う
CSVファイルを読み込み SwiftData を使って永続化しFinder順にソートし表示するサンプルを解説します。
最小の項目数で動作を確認したあと、項目数を増やしより実用的なサンプルを作ります。
【2023年9月20日:Xcode 15 正式版リリースに伴い加筆修正しました】
⚠️注意:
実行には Xcode 15 が必要です。現在 Xcode 15はベータ版のため入手するには Apple Developer Program に登録が必要です。
WWDCのセッションビデオ、Appleのドキュメント、サンプルコードなどを元に Xcode 15 で調査・確認した範囲を記事にしています。正式リリース時に変更になる可能性があります。
この記事は『SwiftData を iOS アプリでためす』マガジンで読むことができます。
『SwiftData を iOS アプリでためす』マガジンで読める記事:
SwiftDataをシンプルにためす
CSVファイルデータを読みSwiftDataで使う(この記事)
アプリ起動時の表示情報にSwiftDataを使う
マクロ と オブザベーション
SwiftDataの検索・絞り込みと並べ替え
--- そのほかも準備中 ---
画像クリックで拡大表示できます
画像を拡大表示中は画像の左右をクリックで画像だけを順に表示できます
ソースコード部分は左右にスクロールできます
リンクしているドキュメントは英文が多いですが、翻訳機能を活用してください
最初のサンプル
概要
CSVファイルを読み込み SwiftData で永続化するアプリを作ります。
SwiftData のコンテナにデータが追加されると画面が自動更新されるため表示はシンプルです。
サンプルに手頃なCSVがなかったので表からCSVファイルを作りました。
デバイスの画面サイズ表
ここでは、日本語化されたヒューマンインターフェイスガイドライン(HIG)の「レイアウト」にある表、「デバイスの画面サイズと向き」をサンプルのデータとして使います。
この表をコピーし「Numbers」アプリにペーストします。(Numbersはバージョン13.1(7037.0.101)を使っています)
新規で「空白」書類を作り
列ヘッダと行ヘッダは0にして
コピーした表をペーストしてください。
列をAとBの二つだけにします。
このファイルは後半で項目を追加して使うので保存してください。
次に「Numbers」アプリの ファイル > 書き出す > CSV… メニューで CSVファイルを作ります。
ここではファイル名を『device.csv』として保存します。
この手順で Numbers アプリで書き出した CSV ファイルは単純に文字列をカンマで区切ったテキストファイルで、各項目は文字列データですが引用符は付きません。
(Numbers アプリの場合引用符は必要な項目だけに付きます、つまりセルのデータ内容によります)
アプリの方針
最もシンプルに読み込むため、プロジェクトにCSVファイルを組み込み、実行時にそれを読み込む方針とします。
SwiftData のテンプレートを元にプロジェクトを作りましょう。
テンプレートのアイテム追加機能のかわりにCSVファイルのデータを追加していけば、画面に読み込んだデータを表示するはずです。
さっそく Xcode で新規プロジェクトを作りましょう。
Interface: SwiftUI 、Language: Swift 、Storage: SwiftData でテンプレートプロジェクトを「SDCSV01」として保存してください。
保存したら一度実行してください。
実行(コンパイル)することでリファクタリング機能などが利用可能になります。
プロジェクトに CSV ファイルを組み込む
プロジェクトにCSVファイルを組み込みます。
まずリソース用グループ「rsrc」を作り、その中に組み込みましょう。
❶ Project navigator で Item.swift を選び一番下の「+」ボタンクリックで表示するメニューから New Group を選びます。
❷ 追加された新しいグループの名称を「rsrc」に変更します。
プロジェクトに新しいフォルダ「rsrc」が作られます。
❸ rsrcの中に「device.csv」ファイルをドラッグ&ドロップする
rsrcグループ内に次の「Copy items if needed」設定でドロップすると物理的に Finder でも rsrcフォルダ内にコピーされます。
❹ ドロップしたファイルの追加オプションを Choose options for adding these files: で確認します。
Copy items if needed と Add to tagets: のプロジェクト名(ターゲット名)を確認して「Finish」をクリック。
これでドロップしたファイルがプロジェクトに組み込まれます。
CSVの内容を表示して確認
追加した device.csv を選ぶと Xcode のエディタで内容や行数を確認できます。
内容はカタカナを含む英数字データでカンマで区切られ引用符はありません。
データを確認したら device.csv ファイルの追加を commit してください。
Xcode 15 では メニュー構成が変更になり Integrate > Commit… です。
Project navigator でプロジェクトファイルを選び、ターゲット「SDCSV01」の Build Phases の「Copy Bundle Resources」で確認できればCSV ファイルの組み込みは成功です。
この設定で追加したリソースはビルド時にアプリのバンドル内にコピーされます。
モデルを作る
CSVファイルの1行に対応するモデルを作ります。
使用するデータは デバイス に サイズ が対応するシンプルなものです。
どちらも String 型とします。
テンプレートの Items型を DeviceName に変更し、プロパティとイニシャライザを変更します。
まず型名を変更します。
Xcode の Refactor 機能を使うとファイル名を含め、必要な部分を同時にもれなく確実に変更できます。
Item.swift ファイルを開き final class Item の Item を選択してコンテキストメニューを表示し Refactor > Rename… を選んでください。
デフォルトではコメント内はリネームに含まれませんがクリックして表示される+ボタンで変更に追加できます。
Items に新しい名称 DeviceName を入力すると関連部分すべて変更できます。
必要な部分が変更され、不要な変更がないことを確認したら「Rename」ボタンで変更を確定してください。
実行して問題なくビルドできることを確認してください。
問題なければ変更を commit してください。
今後も記事を増やすつもりです。 サポートしていただけると大変はげみになります。