😊
Swiftでの単位表示にはMeasurementFormatterを使用しよう
単位の難しさ
世の中には多くの単位が決められており、さらに多くの言語が存在します。
それぞれに対して、自分で実装することは不可能なので、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.5度
43.5 kg
43.5 N/m²
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.5 kΩ
43.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