忙しい人向けの Formatters: Make data human-friendly - #WWDC20
冒頭
私たちは様々なデータを表示するアプリを利用しているが、単位・形式が正しく表示されることは非常に重要。
フォーマッタは日々改善されており、より地域に適したフォーマットが行われるようになっている。このケースでは UAE の例だが、汎用的なアルゴリズムとして何百もの言語・地域に渡ってフォーマットが改善される。
今日はこれらのセクションに分けて解説していく。
Date and times
DateFormatter を利用して最終更新日を表示する例。スタイルは、日付を.medium、時間を.short に設定している。at は .medium の形式として自動的に追加されたもの。
定義済みのスタイルが利用できない場合でも、テンプレートを利用してカスタマイズできる。
省略された曜日を表示するケースでもテンプレートを利用できる。これを例にしてテンプレートの詳細について見ていく。
テンプレートで利用できる文字は、Unicode のサイトで確認できる。Apple は Unicode のメンバーであり、主要なコントリビュータの一人。
”Day of the week”を表示したいと思って調べると、3つの項目が見つかる。では、これらのうちどれを使用したらよいか?
アプリの表示を思い出してみると、今回は”独立して”表示しようとしている。そのため”Stand-Alone”である小文字の「c」を利用するのが正しい。
実際に「c」がどのように変換されるか見てみる。長さが言語によっても変化することに注意。これが正しいテンプレート(今回は Stand-Alone)を選択することが大切な理由。
テンプレートにおいて重要な点として、文字の順序は関係がないということ。
フォーマッタはデータを取り出し、ロケールにあった形式に組み立てる。
最後に注意点すべき点として、DateFormatter の dateFormat プロパティがある。これに直接文字列を指定すると意図したとおりに動かないので、必ずテンプレートの API を介して設定すること。
日付や時刻のフォーマッターAPI は他にもある。DateComponentsFormatter は時間の量、DateIntervalFormatter は期間、RelativeDateTimeFormatter は相対時間、を表現するのにそれぞれ利用できる。
Measurements
天気アプリを例に、MeasurementFormatter の利用例を見ていく。ここでは摂氏16度で値を与えているが、USにローカライズされ、華氏61度で表記されているのが分かる。
同じようにメートルはマイルに、
圧力も同様。
3つの例を見てきたが、他にもたくさんの種類をサポートしている。独自の単位を作成することもできる。WWDC16 の Measurements and Units も参考に。
Names
名前のフォーマットには PersonNameComponentsFormatter を利用できる。
デフォルトでは .medium のスタイルが利用される。
.short ではニックネームまたは短縮形を表示する。
.abbreviated はこのようなモノグラム表示に利用する。ここ数年、モノグラムを利用するアプリケーションは増えてきた。
モノグラフはアバターアイコンの代替として表示するのに便利。しかし、短いモノグラムを生成することができず、UI からはみ出してしまうケースも考えられる。
その場合は、文字列の長さチェックを行うとよい。Swift の文字列の .count は”目で見える形の”文字数を数えるのでかんたんに実装できる。文字数をオーバーしていた場合は、代替として汎用的なアイコンを利用できる。
名前フォーマッターはとても賢く作られている。これは端末の言語が英語で、日本語のデータを表示している例。もちろんこれは一例で、他の言語でも賢く動作する。
Lists
リストを生成するときは、ListFormatter を利用することができる。区切り文字の「,」や「AND」は、リストの個数やロケールにしたがって適切に表示される。
Numbers
数値のフォーマットには NumberFormatter が利用できる。%や小数点などの記号を取得するプロパティも用意されている。
いくつかの数値スタイルをサポートしており、それもロケールにしたがって適切に表示される。他にもたくさんの機能が用意されているので、ドキュメントも参考のこと。
Strings
”何枚の写真を選択したか”といった、汎用的なフォーマットでは提供できないものがある。SwiftUI では Text を利用するコードを書くだけでよく、
stringdict ファイルに対応する設定を記述すればよい。この設定の詳細についてはドキュメントを参考のこと。
まとめ
stringdictファイルや各種フォーマッターを適切に利用していれば、アプリが現在または将来においていくつの言語をサポートしようと、コードを書くのは一度だけで済む。
免責
・本記事は公開情報のみに基づいて作成されています。
・要約(意訳)のみなので、詳細はセッション動画をご確認ください。
役に立った記事などありましたらサポート頂けると嬉しいです。