Swift Playgroundsで学ぶiOSプログラミング

アプリの初期データをファイルから一気に読み込む方法

文●柴田文彦 編集●吉田ヒロ

2018年02月26日 19時00分

Swift 4時代のプロパティリストの読み込み方法

 上で述べたように、このプログラムは現時点では問題なく動くのですが、それがいつまで続くのか保証はありません。Swift時代にふさわしく、NSArrayやNSDictionaryを使わずに、SwiftのArrayやDictionaryオブジェクトにプロパティリストの内容を読み込む方法があるはずです。ほかにも考えられるかもしれませんが、ここでは、いったんDataオブジェクトにプロパティリストの内容をそのまま読み込んでから、その後PropertyListSerializationというクラスを使って、DataオブジェクトをArrayやDictionaryに変換する方法を示します。

NSArrayやNSDictionaryに直接データを読み込む方法がデプリケートされたので、いったんDataに内容を読み込み、それをプロパティリストに変換するという方法を取ります。これならすべてSwiftのクラスだけを使って実現できます

 ArrayやDictionaryには、直接ファイルとやり取りする機能はないので、Dataを経由するのはやむを得ないところです。DataはSwiftならではのクラスなので、Swift時代にふさわしい方法と言えます。さらにこの方法では、メモリ内のデータ転送に比べれば不確実なファイルの読み込みに対して、エラー処理機能を最初から考えてあるなど、モダンな設計になっています。結果は同じになるはずなので、動かして確認してみてください。

プロパティリストから読み込んだデータにもとづいてプログラムを動作させる

 このようにプロパティリストにデータを記録しておくと、プログラムには直接データを記述する必要がなくなります。これは、プログラムのメンテナンスという点で、大きなメリットがあります。あとで何らかの事情でデータが更新されても、プログラム自体には一切手を加える必要はなく、プロパティリストさえ更新すればいいのです。

 今回の最大の目的は、新しいプロパティリストの読み込み方法を示すことなので、すでにその目標には達していることになります。とはいえ、それだけでは実感もわかないので、応用として、テーブルビューとウェブビューを使って、読み込んだ内容を表示してみることにしましょう。このあたりの表示については、いつも使っている手法なので詳しい説明は省きます。プログラムの構成をざっと確認しておきましょう。

 まずUIViewControllerのサブクラスとして、AppViewControllerを定義し、そのviewDidLoadメソッドの中で、プロパティリストを読み込みます。その方法は、上で示したものとまったく同じです。

プロパティリストから読み込んだデータをテーブルビューに表示するためのプログラムの前半です。まず、viewDidLoadの中で上に示した新しい方法でプロパティリストを読み込みます

 このクラスでは、読み込んだプロパティリストの配列に含まれる要素の、「name」と「icon」のキーに付随するデータをテーブルビューに表示します。

テーブルビューを表示するプログラムの後半です。セルには、プロパティリストの「name」キーをテキストとして、「icon」キーの示すファイルの画像をイメージとして表示します

 そのためには、当然ながらアイコンに相当する画像ファイルが必要となります。それは、アップルの製品サイトのページのスクリーンショットから切り出したものを、プロパティリストで指定したアイコンのファイル名に合わせて作成し、あらかじめプロパティリスト本体と同じ方法でプレイグラウンドに追加しておきます。

 テーブルビューの標準的なセルに表示するアイコンの画像は、32×32ピクセルくらいがちょうどいいのですが、ここではスクリーンショットの都合で50x50になっています。そのため、テーブルビューの罫線からはみ出しています。これはこれで面白い表示になっているので、そのままにしました。

プレイグラウンドには、プロパティリストに設定したファイル名に合わせて作成した各アプリのアイコン画像をあらかじめ追加しておきます。この例ではアイコン画像のサイズが大きいので罫線からはみ出しています

 これでテーブルビューの表示はできましたが、プロパティリストには、まだ使っていないデータが含まれています。各macOSアプリの説明を表示するページへのリンクです。そこで、ユーザーがテーブルビューのセルをタップすると、新たなUIViewControllerのオブジェクトを作成し、そのビューをウェブビューに入れ替え、そこにプロパティリストの「link」キーに付随する値のURLから読み込んだ内容を表示するようにしてみます。

ユーザーが選択したアプリの説明をウェブビューに表示するために、ビューコントローラーを作成して、そのビューをウェブビューに置き換え、そこにプロパティリストの「link」の示すURLを読み込んでいます

 テーブルビューとウェブビューを切り替えるために、ナビゲーションコントローラーも導入しています。そしてテーブルビューのナビゲーションバーには「macOSアプリ」というタイトルを表示するようにしました。

ナビゲーションコントローラーも追加したので、テーブルビューのタイトルも「macOSアプリ」と表示できるようになりました。WebKitのインポートも見逃さないでください

 これで、どれかのアプリ名をタップすると、その説明が表示されるようになりました。

テーブルビューから選択したアプリの説明が、ナビゲーション機能によって切り替わる別のビューに表示されるようになりました

 結局今回のプログラムは、macOSのアプリカタログのようなものになりました。

次回の予定

 今回もプロパティリストの読み込みという、それ自体はかなり地味なトピックとなりました。このような機能には、なかなか興味も湧きにくいかもしれませんが、視覚的に派手なデモを一歩脱して実用的なプログラムを作るためには不可欠のものです。次回も、もう1回だけ、例によって「iOSのデータの扱い」に関する機能を取り上げる予定です。

mobileASCII.jp TOPページへ

mobile ASCII

Access Rankingアクセスランキング