玩轉iOS開發:iOS 10 新特性《Measurement》

CainLuo發表於2017-06-17

文章分享至我的個人技術部落格: 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的程式碼我就不貼上來了, 大夥可以去專案裡自己去看看, 整體效果就醬紫:

1


支援換算單位的型別

  • 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


最後

碼字很費腦, 看官賞點飯錢可好

微信

支付寶

相關文章