プロジェクトに含まれているリソースファイルにアクセスする方法を解説します。
アプリ内のファイルシステムへアクセスする方法を知りたい方は、【Swift】アプリ内のファイル読み書きを御覧ください。
環境
この記事の情報は次のバージョンで動作確認しています。
【Xcode】11.4.1
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
テキストファイルの準備
次のような国名と首都名をカンマ区切りで格納した"captal.txt"を準備します。
1 2 3 4 5 6 7 8 9 10 11 12 |
日本,東京 アメリカ合衆国,ワシントンD.C 中華人民共和国,北京 インド,ニューデリー インドネシア,ジャカルタ パキスタン,イスラマバード ブラジル,ブラジリア ナイジェリア,アブジャ バングラディシュ,ダッカ ロシア,モスクワ |
下図のようにファイルをドラッグしてProject Navigatorに追加します。
サンプルソースと解説
プロジェクトに追加したcapital.txtファイルを読み込む部分のコードがこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/// ①プロジェクト内にある"capital.txt"のパス取得 guard let fileURL = Bundle.main.url(forResource: "capital", withExtension: "txt") else { fatalError("ファイルが見つからない") } /// ②capital.txtファイルの内容をfileContents:Stringに読み込み guard let fileContents = try? String(contentsOf: fileURL) else { fatalError("ファイル読み込みエラー") } /// ③ファイルの内容を"\n"で分割。 let countries = fileContents.components(separatedBy: "\n") /// ④1行づつ出力 for capital in countries { let values = capital.components(separatedBy: ",") print("\(values[0])の首都は、\(values[1])です。") } |
①ファイルのパスを取得
1 2 3 4 5 6 |
/// ①プロジェクト内にある"capital.txt"のパス取得 guard let fileURL = Bundle.main.url(forResource: "capital", withExtension: "txt") else { fatalError("ファイルが見つからない") } |
Xcodeでビルドされたアプリでは「バンドル(Bundle)」と呼ばれるものが作成され、プロジェクトに追加したファイルはこのBundle内に配置されます。
Bundle.main.url()を使って、このBundle内に格納された対象ファイルのパスを取得します。
引数(forResouece)にはファイル名、引数(withExtension)に拡張子を指定します。
対象ファイルが存在しない場合はnilが戻りますので、サンプルではfatalError()で強制的にアプリをクラッシュさせています。
②ファイルの読み込み
1 2 3 4 5 6 |
/// ②capital.txtファイルの内容をfileContents:Stringに読み込み guard let fileContents = try? String(contentsOf: fileURL) else { fatalError("ファイル読み込みエラー") } |
特別なイニシャライザであるString(contentsOf :)を使用して、ファイルの内容を文字列にロードします。
このイニシャライザはロードできない場合にエラーを返す為、tryまたはtry?を使用して呼び出す必要があります。
fileContentsへの読み込みが成功したら、以降は通常の文字列として好きなように使用できます。
③ファイルの内容を分割
1 2 3 4 |
/// ③ファイルの内容を"\n"で分割。 let countries = fileContents.components(separatedBy: "\n") |
ファイルの内容を\n(改行)で分割して、配列に変換しています。
④1行づつ出力
1 2 3 4 5 6 7 |
/// ④1行づつ出力 for capital in countries { let values = capital.components(separatedBy: ",") print("\(values[0])の首都は、\(values[1])です。") } |
1行づつ、読み込んだファイルを整形し出力しています。
1 2 3 4 5 6 7 8 9 10 11 12 |
日本の首都は、東京です。 アメリカ合衆国の首都は、ワシントンD.Cです。 中華人民共和国の首都は、北京です。 インドの首都は、ニューデリーです。 インドネシアの首都は、ジャカルタです。 パキスタンの首都は、イスラマバードです。 ブラジルの首都は、ブラジリアです。 ナイジェリアの首都は、アブジャです。 バングラディシュの首都は、ダッカです。 ロシアの首都は、モスクワです。 |
あわせて読みたい記事
【Swift】プロジェクト内のJSONファイル読み込み
プロジェクトにリソースとしてバンドルされたJSONファイルを読み込む方法を解説します。 リソースファイルではなく、アプリ内のファイルシステムにあるファイルにアクセスしたい場合は、 も合わせてご覧下さい。
【Swift】アプリ内のファイル読み書き
(2022/01/18 更新) アプリ内のファイル読み書き方法を解説します。
【Swift】guard文の使い方
swiftのguard文の使い方を解説します。