🔬
MeasurementFormatterの単位表示観測隊
本日は MeasurementFormatter
の unitOptions
を観測する。
おさらい
Measurement
と MeasurementFormatter
をおさらい。
Measurement
単位と数値を持つ。
Measurement(value: 数値, unit: 単位)
と書く
MeasurementFormatter
表示に関することを扱う。
言語/地域の情報を指定することが出来る。
本日観測する unitOptions
はここに含まれる。
では観測を始める。
指定なしのデフォルト
unitOptions
を指定するコードを書かない。
コード
let formatter = MeasurementFormatter()
var length1 = Measurement(
value: 1500, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length1))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length1))
var length2 = Measurement(
value: 0.0005, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length2))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length2))
結果
1500 .meters は
1.5 km //ja_JP
0.932 mi //en_US
0.0005 .meters は
0 km //ja_JP
0 mi //en_US
になった。
メートルで作成したのにキロやマイルで表示
naturalScale
コード
let formatter = MeasurementFormatter()
formatter.unitOptions = .naturalScale
var length1 = Measurement(
value: 1500, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length1))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length1))
var length2 = Measurement(
value: 15, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length2))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length2))
var length3 = Measurement(
value: 0.0003, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length3))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length3))
結果
1500 .meters は
1.5 km //ja_JP
0.932 mi //en_US
15 .meters は
15 m //ja_JP
49.213 ft //en_US
0.0003 .meters は
0.3 mm //ja_JP
0.012 in //en_US
になった。
自動でkm、マイル、m、フィート、mm、inが変わる。ただしcmはなし。
providedUnit
コード
let formatter = MeasurementFormatter()
formatter.unitOptions = .providedUnit
var length1 = Measurement(
value: 1500, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length1))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length1))
var length2 = Measurement(
value: 0.0005, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length2))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length2))
結果
1500 .meters は
1,500 m
1,500 m
0.0005 .meters は
0 m
0 m
になった。
メートルで作ったのでメートルで表示
providedUnit convertあり
provided ってのが
- インスタンスが作成されたときのことで、単位をコンバートしても不変
- 単位をコンバートしたら変わる
のどっちなのか観測する。
コード
let formatter = MeasurementFormatter()
formatter.unitOptions = .providedUnit
var length1 = Measurement(
value: 1500, unit: UnitLength.meters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length1))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length1))
length1.convert(to: .millimeters)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: length1))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: length1))
結果
1500 .meters の作成後は
1,500 m
1,500 m
.millimeters へコンバートしたら
1,500,000 mm
1,500,000 mm
となった。
ミリにコンバートしたら表示もミリになった。
ちなみに
コンバートした新しいインスタンスを作成する converted
もある。
let length2 = length1.converted(to: .millimeters)
temperatureWithoutUnit
単位を省いた温度ということだが、CやFを省いて丸だけで表示するアレである。
コード
let formatter = MeasurementFormatter()
formatter.unitOptions = .temperatureWithoutUnit
var hundred1 = Measurement(
value: 100, unit: UnitTemperature.celsius)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: hundred1))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: hundred1))
var hundred2 = Measurement(
value: 100, unit: UnitTemperature.fahrenheit)
formatter.locale = Locale(identifier: "ja_JP")
print(formatter.string(from: hundred2))
formatter.locale = Locale(identifier: "en_US")
print(formatter.string(from: hundred2))
結果
摂氏100度で作成したものは
100°
100°
華氏100度で作成したものは
37.778°
37.778°
となる。
両方とも摂氏で表示している。
Discussion