WWDC2016のMeasurements and Units、まとめてみました。
こちらは、Foundationに追加された新機能になるので、新しいクラス・構造体の紹介と、
それらをどう組み合わせて使うかという話で全てになります。
新しいクラス・構造体は以下の通りです。
Measurement
04:00 - 05:30, 15:30 - 16:00
Measurement
は、単位を伴う量を示すクラス・構造体です。
そのため、量を示すvalue
と単位を表すunit
をプロパティとして持ちます。
加減乗除についても、以下のスライドのように行うことができます。
Unit
05:30 - 06:30, 10:30-14:30
Unit
は単位を表すクラスです。
Symbol
、Dimension
、Equivalence
をプロパティとして持つことができます。
それぞれの意味合いは次の通りです。
プロパティ | 説明 | Required or Optional |
---|---|---|
Symbol | 単位に対応する文字列(m、km、ft...)。 | Required |
Dimension | 単位系における次元。 | Optional |
Equivalence | 他のDimensionへの変換 | Optional |
Dimension
やEquivalence
がない単位はありうるため、Unit
の定義は以下の通りになります。
Dimension
06:30 - 10:30, 14:30 - 15:30
Dimension
は単位系の次元を表すクラスです。
Dimension
クラスでは、基準となるDimension
が存在し、そこから各Dimensionへと変換するという考え方を採用しているため、基準となるDimension
であるbaseUnit
と、そこからどう変換するかを示すためのconverter
を引数として取って初期化を行います。
baseUnit
が存在するため、以下のように同じ次元だが別の単位を計算する、といった場合には計算結果はbaseUnit
に変換されます。
ちなみに、既に定義されているDimension
一覧は下記の通りとなります。
面白いことに、Duration(時間)やLength(距離的な長さ)だけでなく、Illuminance(照度)やFuelEfficiency(燃費)といった、あまり一般的でない単位も定義されています。
MeasurementFormatter
16:00 - 21:30
単位のローカライズをきっちりやろうとすると、かなりタフな仕事になります。
というのも、表記上の単位をローカライズするだけではなく、文化圏に合わせた単位を選択する必要があるためです。
(以下の表では、アメリカのみポンドヤード法の影響でマイル表記となっている)
それを簡易化するために作られたクラスがMeasurementFormatterクラスになります。
これにMeasurementクラスのインスタンスを渡して処理することでローカライズされた適切な値を取得することができます。
また、UnitOptionsに適切な値を渡すことにより、出力結果の単位を様々な形に変更することもできます。