忙しい人向けの Formatters: Make data human-friendly - #WWDC20

画像31

冒頭

私たちは様々なデータを表示するアプリを利用しているが、単位・形式が正しく表示されることは非常に重要。

画像1

フォーマッタは日々改善されており、より地域に適したフォーマットが行われるようになっている。このケースでは UAE の例だが、汎用的なアルゴリズムとして何百もの言語・地域に渡ってフォーマットが改善される。

画像2

今日はこれらのセクションに分けて解説していく。

画像3

Date and times

DateFormatter を利用して最終更新日を表示する例。スタイルは、日付を.medium、時間を.short に設定している。at は .medium の形式として自動的に追加されたもの。

画像4

定義済みのスタイルが利用できない場合でも、テンプレートを利用してカスタマイズできる。

画像5

省略された曜日を表示するケースでもテンプレートを利用できる。これを例にしてテンプレートの詳細について見ていく。

画像6

テンプレートで利用できる文字は、Unicode のサイトで確認できる。Apple は Unicode のメンバーであり、主要なコントリビュータの一人。

画像7

”Day of the week”を表示したいと思って調べると、3つの項目が見つかる。では、これらのうちどれを使用したらよいか?

画像8

アプリの表示を思い出してみると、今回は”独立して”表示しようとしている。そのため”Stand-Alone”である小文字の「c」を利用するのが正しい。

画像9

実際に「c」がどのように変換されるか見てみる。長さが言語によっても変化することに注意。これが正しいテンプレート(今回は Stand-Alone)を選択することが大切な理由。

画像10

テンプレートにおいて重要な点として、文字の順序は関係がないということ。

画像11

フォーマッタはデータを取り出し、ロケールにあった形式に組み立てる。

画像12

最後に注意点すべき点として、DateFormatter の dateFormat プロパティがある。これに直接文字列を指定すると意図したとおりに動かないので、必ずテンプレートの API を介して設定すること。

画像13

日付や時刻のフォーマッターAPI は他にもある。DateComponentsFormatter は時間の量、DateIntervalFormatter は期間、RelativeDateTimeFormatter は相対時間、を表現するのにそれぞれ利用できる。

画像14

Measurements

天気アプリを例に、MeasurementFormatter の利用例を見ていく。ここでは摂氏16度で値を与えているが、USにローカライズされ、華氏61度で表記されているのが分かる。

画像15

同じようにメートルマイルに、

画像16

圧力も同様。

画像17

3つの例を見てきたが、他にもたくさんの種類をサポートしている。独自の単位を作成することもできる。WWDC16 の Measurements and Units も参考に。

画像18

Names

名前のフォーマットには PersonNameComponentsFormatter を利用できる。

画像19

デフォルトでは .medium のスタイルが利用される。

画像20

.short ではニックネームまたは短縮形を表示する。

画像21

.abbreviated はこのようなモノグラム表示に利用する。ここ数年、モノグラムを利用するアプリケーションは増えてきた。

画像22

モノグラフはアバターアイコンの代替として表示するのに便利。しかし、短いモノグラムを生成することができず、UI からはみ出してしまうケースも考えられる。

画像23

その場合は、文字列の長さチェックを行うとよい。Swift の文字列の .count は”目で見える形の”文字数を数えるのでかんたんに実装できる。文字数をオーバーしていた場合は、代替として汎用的なアイコンを利用できる。

画像24

名前フォーマッターはとても賢く作られている。これは端末の言語が英語で、日本語のデータを表示している例。もちろんこれは一例で、他の言語でも賢く動作する。

画像25

Lists

リストを生成するときは、ListFormatter を利用することができる。区切り文字の「,」や「AND」は、リストの個数やロケールにしたがって適切に表示される。

画像26

Numbers

数値のフォーマットには NumberFormatter が利用できる。%や小数点などの記号を取得するプロパティも用意されている。

画像27

いくつかの数値スタイルをサポートしており、それもロケールにしたがって適切に表示される。他にもたくさんの機能が用意されているので、ドキュメントも参考のこと。

画像28

Strings

”何枚の写真を選択したか”といった、汎用的なフォーマットでは提供できないものがある。SwiftUI では Text を利用するコードを書くだけでよく、

画像29

stringdict ファイルに対応する設定を記述すればよい。この設定の詳細についてはドキュメントを参考のこと。

画像30

まとめ

stringdictファイルや各種フォーマッターを適切に利用していれば、アプリが現在または将来においていくつの言語をサポートしようと、コードを書くのは一度だけで済む。

免責

・本記事は公開情報のみに基づいて作成されています。
・要約(意訳)のみなので、詳細はセッション動画をご確認ください。


役に立った記事などありましたらサポート頂けると嬉しいです。