文章分享至我的個人技術部落格: https://cainluo.github.io/14975320210226.html
單位換算
單位換算其實在iOS開發中, 一直是一個問題, 雖然在大部分App
裡不一定會遇到換算, 但在一些專業級的App裡, 比如導航, 測量, 計算, 汽車輔助類等App
就蛋疼了, 因為官方並沒有提供這類的API
, 基本上都是自己寫, 或者是整合第三方庫.
蘋果爸爸為了再一次完善API
, 在Foundation
庫里加了這麼一個叫做Measurement
的庫, 就是為了解決單位換算的問題.
這裡的專案是Objective-C
版本的, 如果喜歡Swift
版本的話, 可以到這裡去檢視.
建立專案
由於這裡要講的東西很簡單, 我就不過多的複雜化直接看程式碼好了:
// 初始化一個秒數的基數
NSMeasurement *seconds = [[NSMeasurement alloc] initWithDoubleValue:666
unit:NSUnitDuration.seconds];
// 轉換為分鐘
NSMeasurement *minutes = [seconds measurementByConvertingToUnit:NSUnitDuration.minutes];
// 轉換為小時
NSMeasurement *hours = [seconds measurementByConvertingToUnit:NSUnitDuration.hours];
NSString *secondsString = [NSString stringWithFormat:@"%.2f 秒", seconds.doubleValue];
NSString *minutesString = [NSString stringWithFormat:@"%.2f 分鐘", minutes.doubleValue];
NSString *hoursString = [NSString stringWithFormat:@"%.2f 小時", hours.doubleValue];
複製程式碼
UI
的程式碼我就不貼上來了, 大夥可以去專案裡自己去看看, 整體效果就醬紫:
支援換算單位的型別
- NSDimension 維度
- NSUnitAcceleration 每秒/平方米
- NSUnitAngle 角度
- NSUnitArea 平方米
- NSUnitConcentrationMass 每克/升
- NSUnitDispersion 百萬分之
- NSUnitDuration 秒
- NSUnitElectricCharge 庫侖
- NSUnitElectricCurrent 安培
- NSUnitElectricPotentialDifference 伏
- NSUnitElectricResistance 歐姆
- NSUnitEnergy 焦耳
- NSUnitFrequency 赫茲
- NSUnitFuelEfficiency 升/每100公里
- NSUnitLength 米
- NSUnitIlluminance 公斤
- NSUnitPower 美國瓦茨
- NSUnitPressure 牛頓/每平方米
- NSUnitSpeed 秒/米
- NSUnitTemperature 開爾文
- NSUnitVolume 升
總結
蘋果爸爸在這個庫裡提供了170
多種不同的單位換算, 我這裡只是用了一丟丟, 更多的方法有待各位去挖掘, 如果想了解更多的話, 可以去看看WWDC 2016的視訊講解.
工程地址
專案地址: https://github.com/CainRun/iOS-10-Characteristic/tree/master/7.Measurement