見出し画像

CSVファイルデータを読みSwiftDataで使う

割引あり

CSVファイルを読み込み SwiftData を使って永続化しFinder順にソートし表示するサンプルを解説します。
最小の項目数で動作を確認したあと、項目数を増やしより実用的なサンプルを作ります。
【2023年9月20日:Xcode 15 正式版リリースに伴い加筆修正しました】

⚠️注意:
実行には Xcode 15 が必要です。
現在 Xcode 15はベータ版のため入手するには Apple Developer Program に登録が必要です。
WWDCのセッションビデオ、Appleのドキュメント、サンプルコードなどを元に Xcode 15 で調査・確認した範囲を記事にしています。正式リリース時に変更になる可能性があります。

執筆時点の環境:
Xcode 15 Beta 8
macOS 13.5.2
(※ Beta 5 以降それぞれいくつか変更がありました。)

この記事は『SwiftData を iOS アプリでためす』マガジンで読むことができます。

『SwiftData を iOS アプリでためす』マガジンで読める記事:
SwiftDataをシンプルにためす
CSVファイルデータを読みSwiftDataで使う(この記事)
アプリ起動時の表示情報にSwiftDataを使う
マクロ と オブザベーション
SwiftDataの検索・絞り込みと並べ替え
--- そのほかも準備中 ---



  • 画像クリックで拡大表示できます

  • 画像を拡大表示中は画像の左右をクリックで画像だけを順に表示できます

  • ソースコード部分は左右にスクロールできます

  • リンクしているドキュメントは英文が多いですが、翻訳機能を活用してください




最初のサンプル

概要

CSVファイルを読み込み SwiftData で永続化するアプリを作ります。
SwiftData のコンテナにデータが追加されると画面が自動更新されるため表示はシンプルです。

サンプルに手頃なCSVがなかったので表からCSVファイルを作りました。


デバイスの画面サイズ表

ここでは、日本語化されたヒューマンインターフェイスガイドライン(HIG)の「レイアウト」にある表、「デバイスの画面サイズと向き」をサンプルのデータとして使います。

https://developer.apple.com/jp/design/human-interface-guidelines/layout#Device-screen-sizes-and-orientations

デバイスとサイズの対応表を選択しコピーする

この表をコピーし「Numbers」アプリにペーストします。(Numbersはバージョン13.1(7037.0.101)を使っています)

新規で「空白」書類を作り

基本の空白を選び「作成」

列ヘッダと行ヘッダは0にして

列ヘッダと行ヘッダをゼロにする

コピーした表をペーストしてください。

表をペーストした状態

列をAとBの二つだけにします。

列を二つに変更

このファイルは後半で項目を追加して使うので保存してください。

次に「Numbers」アプリの ファイル > 書き出す > CSV… メニューで CSVファイルを作ります。

CSVで書き出す
テキストエンコーディングをUTF-8で保存

ここではファイル名を『device.csv』として保存します。

この手順で Numbers アプリで書き出した CSV ファイルは単純に文字列をカンマで区切ったテキストファイルで、各項目は文字列データですが引用符は付きません
(Numbers アプリの場合引用符は必要な項目だけに付きます、つまりセルのデータ内容によります)


アプリの方針

最もシンプルに読み込むため、プロジェクトにCSVファイルを組み込み、実行時にそれを読み込む方針とします。
SwiftData のテンプレートを元にプロジェクトを作りましょう。
テンプレートのアイテム追加機能のかわりにCSVファイルのデータを追加していけば、画面に読み込んだデータを表示するはずです。

さっそく Xcode で新規プロジェクトを作りましょう。

Interface: SwiftUI 、Language: Swift 、Storage: SwiftData でテンプレートプロジェクトを「SDCSV01」として保存してください

⚠️注意:
Xcode 15 Beta は Beta 7 で保存されるテンプレートが変更されました。
最新版 Xcode 15 で保存してください。

プロジェクト名を入力して「Next」

保存したら一度実行してください。
実行(コンパイル)することでリファクタリング機能などが利用可能になります。


プロジェクトに CSV ファイルを組み込む

プロジェクトにCSVファイルを組み込みます。
まずリソース用グループ「rsrc」を作り、その中に組み込みましょう。

❶ Project navigator で Item.swift を選び一番下の「+」ボタンクリックで表示するメニューから New Group を選びます。

❷ 追加された新しいグループの名称を「rsrc」に変更します。

Project navigator にグループを追加して rsrc とする

プロジェクトに新しいフォルダ「rsrc」が作られます。

Finderでフォルダを確認

❸ rsrcの中に「device.csv」ファイルをドラッグ&ドロップする

csvファイルをrsrcグループにドロップする

rsrcグループ内に次の「Copy items if needed」設定でドロップすると物理的に Finder でも rsrcフォルダ内にコピーされます。

❹ ドロップしたファイルの追加オプションを Choose options for adding these files: で確認します。
Copy items if needed と Add to tagets: のプロジェクト名(ターゲット名)を確認して「Finish」をクリック。

Choose options for adding these files: 画面

これでドロップしたファイルがプロジェクトに組み込まれます。


CSVの内容を表示して確認

追加した device.csv を選ぶと Xcode のエディタで内容や行数を確認できます。

device.csv を選ぶと内容を確認できる

内容はカタカナを含む英数字データでカンマで区切られ引用符はありません

データを確認したら device.csv ファイルの追加を commit してください。
Xcode 15 では メニュー構成が変更になり Integrate > Commit… です。

Project navigator でプロジェクトファイルを選び、ターゲット「SDCSV01」の Build Phases の「Copy Bundle Resources」で確認できればCSV ファイルの組み込みは成功です。

CSV ファイルを組み込み後の設定を確認

この設定で追加したリソースはビルド時にアプリのバンドル内にコピーされます


モデルを作る

CSVファイルの1行に対応するモデルを作ります。
使用するデータは デバイス に サイズ が対応するシンプルなものです。
どちらも String 型とします。
テンプレートの Items型を DeviceName に変更し、プロパティとイニシャライザを変更します。

まず型名を変更します。
Xcode の Refactor 機能を使うとファイル名を含め、必要な部分を同時にもれなく確実に変更できます。
Item.swift ファイルを開き final class Item の Item を選択してコンテキストメニューを表示し Refactor > Rename… を選んでください。

Refactor > Rename… を選ぶ

デフォルトではコメント内はリネームに含まれませんがクリックして表示される+ボタンで変更に追加できます。

Xcode のリファクタリング機能の説明

Items に新しい名称 DeviceName を入力すると関連部分すべて変更できます。
必要な部分が変更され、不要な変更がないことを確認したら「Rename」ボタンで変更を確定してください。

実行して問題なくビルドできることを確認してください。
問題なければ変更を commit してください。

ここから先は

15,762字 / 20画像 / 2ファイル
この記事のみ ¥ 300〜

今後も記事を増やすつもりです。 サポートしていただけると大変はげみになります。