😊

Swiftでの単位表示にはMeasurementFormatterを使用しよう

2022/07/21に公開

単位の難しさ

世の中には多くの単位が決められており、さらに多くの言語が存在します。
それぞれに対して、自分で実装することは不可能なので、Swiftに便利なFormatterがあるのでそちらに任せましょう

平方キロメートル, メートル, kL, 度, キログラム, N/m², G, 時間, fps, 時速キロメートル, カロリー, キロワット, ルクス, Ah, kA, kV, kΩ, g/L, ppm, マイル毎ガロン, バイト

Formatできるもの

以下のものが執筆時点で利用可能になっています。(アップデートで追加される可能性あり)

単位(例) 説明
UnitArea.squareKilometers 広さ
UnitLength.meters 長さ
UnitVolume.kiloliters 容量
UnitAngle.degrees 角度
UnitMass.kilograms 質量
UnitPressure.newtonsPerMetersSquared 圧力
UnitAcceleration.gravity 加速度
UnitDuration.hours 期間
UnitFrequency.framesPerSecond 頻度
UnitSpeed.kilometersPerHour 速度
UnitEnergy.calories 仕事量
UnitPower.kilowatts 仕事率
UnitTemperature.celsius 温度
UnitIlluminance.lux 照度
UnitElectricCharge.ampereHours 電荷
UnitElectricCurrent.kiloamperes 電流
UnitElectricPotentialDifference.kilovolts 電圧
UnitElectricResistance.kiloohms 電気抵抗
UnitConcentrationMass.gramsPerLiter 濃度
UnitDispersion.partsPerMillion 分散度
UnitFuelEfficiency.milesPerGallon 燃費
UnitInformationStorage.bytes データ量

Format例

43.5 km²
43.5 m
43.5 kL
43.543.5 kg
43.5 N/43.5 G
43.5時間
43.5 fps
43.5 km/h

43.5 cal
43.5 kW
43.5°C
43.5 lx

43.5 Ah
43.5 kA
43.5 kV
43.543.5 g/L
43.5 ppm

43.5 mpg

43.5 byte

Formatの仕方

let formatter = MeasurementFormatter()
formatter.numberFormatter.minimumFractionDigits = 1 // 最小少数桁数を1に
formatter.numberFormatter.maximumFractionDigits = 2 // 最大少数桁数を2に
formatter.unitStyle = .long
formatter.unitOptions = [
  .providedUnit, // 選択した単位で表示(他の単位に変換しない)
  .naturalScale, // 読みやすいように上位の単位に変換する。 (123.456センチメートル -> 1.235メートル)
  .temperatureWithoutUnit // 温度表示前の摂氏、華氏表示なし
] // 全選択がいい感じ

let value: Double = 123.456

print(formatter.string(from: .init(value: value, unit: UnitLength.centimeters)))
print(formatter.string(from: .init(value: value, unit: UnitLength.meters)))
print(formatter.string(from: .init(value: value, unit: UnitLength.kilometers)))

Discussion

ログインするとコメントできます