NSUnitAcceleration 加速度单位
苹果的解释是 Base unit - metersPerSecondSquared ,也就是 秒每平方米的意思(㎡/s),学过中学物理都知道这个事加速度的意思,NSUnitAcceleration提供了两个属性
@property (class, readonly, copy) NSUnitAcceleration *metersPerSecondSquared;
@property (class, readonly, copy) NSUnitAcceleration *gravity;
从字面意思来看第一个是 秒每平方米 , 第二个是重力加速度;
那么这东西干啥子用的了 ? 我们打开Apple的API不难发现
NSMeasurementFormatter *formatter = [[NSMeasurementFormatter alloc] init];
[formatter setUnitOptions:NSMeasurementFormatterUnitOptionsProvidedUnit];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh"]];
NSMeasurement *measurement1 = [[NSMeasurement alloc] initWithDoubleValue:12 unit:NSUnitAcceleration.metersPerSecondSquared];
NSMeasurement *measurement2 = [[NSMeasurement alloc] initWithDoubleValue:12 unit:NSUnitAcceleration.gravity];
NSLog(@"%@",[formatter stringFromMeasurement:measurement1]); // 12米/秒²
NSLog(@"%@",[formatter stringFromMeasurement:measurement2]); // 12 G
NSMeasurementFormatter
: 把指定数字封装成 加速度的,然后按照一定的格式输出。
NSUnitAngle 几何角度单位
Base unit - degrees , degrees 其实是度的意思,eg:这个三角形的角多少度
Apple提供了若干弧度单位如下
@property (class, readonly, copy) NSUnitAngle *degrees;//度(°)
@property (class, readonly, copy) NSUnitAngle *arcMinutes;//分(ʹ)
@property (class, readonly, copy) NSUnitAngle *arcSeconds;//秒(ʺ)
@property (class, readonly, copy) NSUnitAngle *radians;//弧度(rad)
@property (class, readonly, copy) NSUnitAngle *gradians;//百分度制(grad),1G = 直角的1%
@property (class, readonly, copy) NSUnitAngle *revolutions;//转(rev)
我们将90度转成对应的其他单位
NSMeasurement *measurement = [[NSMeasurement alloc] initWithDoubleValue:90 unit:NSUnitAngle.degrees];
NSMeasurement *measurement1 = [measurement measurementByConvertingToUnit:NSUnitAngle.arcMinutes];
NSMeasurement *measurement2 = [measurement measurementByConvertingToUnit:NSUnitAngle.arcSeconds];
NSMeasurement *measurement3 = [measurement measurementByConvertingToUnit:NSUnitAngle.radians];
NSMeasurement *measurement4 = [measurement measurementByConvertingToUnit:NSUnitAngle.gradians];
NSMeasurement *measurement5 = [measurement measurementByConvertingToUnit:NSUnitAngle.revolutions];
NSLog(@"%f",measurement1.doubleValue); // 5399.892002
NSLog(@"%f",measurement2.doubleValue); // 323997.408021
NSLog(@"%f",measurement3.doubleValue); // 1.570796
NSLog(@"%f",measurement4.doubleValue); // 100.000000
NSLog(@"%f",measurement5.doubleValue); // 0.250000
其实我们不难看出这个NSMeasurement
的使用方法,即先初始化一个数值对应单位,然后在通过这个单位转成另外一个单位并获取值,为神马90度转分秒之后不是整数了?
我觉得这种问题我在这里就不用解释了 90° == π/2 rad , 90° == 100grad , 90° == 0.25rev
NSUnitArea 面积单位
Base unit - squareMeters ,基础单位平方米
@property (class, readonly, copy) NSUnitArea *squareMegameters;//平方表 Megameter兆米(=100万米)
@property (class, readonly, copy) NSUnitArea *squareKilometers;//平方千米
@property (class, readonly, copy) NSUnitArea *squareMeters;//平方米
@property (class, readonly, copy) NSUnitArea *squareCentimeters;///平方厘米
@property (class, readonly, copy) NSUnitArea *squareMillimeters;///平方毫米
@property (class, readonly, copy) NSUnitArea *squareMicrometers;///平方微米
@property (class, readonly, copy) NSUnitArea *squareNanometers;///平方纳米
@property (class, readonly, copy) NSUnitArea *squareInches;///平方英寸
@property (class, readonly, copy) NSUnitArea *squareFeet;///平方英尺
@property (class, readonly, copy) NSUnitArea *squareYards;///平方码
@property (class, readonly, copy) NSUnitArea *squareMiles;///平方英里
@property (class, readonly, copy) NSUnitArea *acres;///英亩
@property (class, readonly, copy) NSUnitArea *ares;///公亩(等于100平方米)
@property (class, readonly, copy) NSUnitArea *hectares;///公顷
同样需要来一段代码验证码:
NSMeasurement *measurement = [[NSMeasurement alloc] initWithDoubleValue:100000 unit:NSUnitArea.squareMeters];
NSMeasurement *measurement1 = [measurement measurementByConvertingToUnit:NSUnitArea.squareKilometers];
NSMeasurement *measurement2 = [measurement measurementByConvertingToUnit:NSUnitArea.squareCentimeters];
NSMeasurement *measurement3 = [measurement measurementByConvertingToUnit:NSUnitArea.squareFeet];
NSMeasurement *measurement4 = [measurement measurementByConvertingToUnit:NSUnitArea.ares];
NSMeasurement *measurement5 = [measurement measurementByConvertingToUnit:NSUnitArea.hectares];
NSLog(@"%f",measurement1.doubleValue); // 0.100000
NSLog(@"%f",measurement2.doubleValue); // 1000000000.000000
NSLog(@"%f",measurement3.doubleValue); // 1076391.505118
NSLog(@"%f",measurement4.doubleValue); // 1000.000000
NSLog(@"%f",measurement5.doubleValue); // 10.000000
NSUnitConcentrationMass 单元集中质量(密度)
Base unit - gramsPerLiter ,这个名字的确略显抽象,其实用我们物理的话来说就是 密度 ,简直就是坑爹,来张图
首先看下这个货给我们提供了神马
@property (class, readonly, copy) NSUnitConcentrationMass *gramsPerLiter; //克每升
@property (class, readonly, copy) NSUnitConcentrationMass *milligramsPerDeciliter;//毫克每分升
+ (NSUnitConcentrationMass *)millimolesPerLiterWithGramsPerMole:(double)gramsPerMole; // 毫摩尔每升克每摩尔
使用方法 :
NSMeasurement *measurement1 = [[NSMeasurement alloc] initWithDoubleValue:7890 unit:NSUnitConcentrationMass.gramsPerLiter];
NSMeasurement *measurement2 = [measurement1 measurementByConvertingToUnit:NSUnitConcentrationMass.milligramsPerDeciliter];
NSLog(@"%f",measurement1.doubleValue); // 7890.000000
NSLog(@"%f",measurement2.doubleValue); // 789000.000000
这个是两个单位之间的转换,那么这个货不老实,提供了一个类方法
来段代码