Objective-C 的单位转换库
库中的转换基于公式 y = A * x + B,其中 x 是源值,y 是目标值,A 是转换规则中的乘数,B 是加数。
例如,可以通过将 x 乘以 1.6 将英里转换为公里。在这种情况下,A = 1.6,B = 0. 开尔文值通过减去 273 转换为摄氏度,因此在开尔文到摄氏度转换中:A = 1,B = -273。为指定规则,您有一个通用的 setConversionRule:fromUnit:toUnit:
方法,但您更有可能使用以 letUnit:convertToUnit:...
开头的便利方法
要使用转换库,您首先需要创建一个 HHUnitConverter
实例并设置所需的转换规则
HHUnitConverter *converter = [HHUnitConverter new];
[converter letUnit:@"mi" convertToUnit:@"km" byMultiplyingBy:1.609344];
[converter letUnit:@"km" convertToUnit:@"m" byMultiplyingBy:1000];
[converter letUnit:@"m" convertToUnit:@"cm" byMultiplyingBy:100];
然后您可以使用转换对象以任何您想要的转换值。转换器足够智能,可以找到您注册的转换规则之间(以及反向依赖)的依赖关系,因此当您说英里可以转换为公里,公里可以转换为米时,它知道如何正确地转换英里到米(反之亦然),因此调用是可以的
[converter value:482803.2 convertedFromUnit:@"m" toUnit:@"mi"]
当然,它将处理最简单的情况
[converter value:300 convertedFromUnit:@"mi" toUnit:@"km"]
此外,该库可以处理复合单位转换,例如,您可以使用以下代码将“每公里的升”转换为“每英里的加仑”
[converter letUnit:@"mi" convertToUnit:@"km" byMultiplyingBy:1.609344];
[converter letUnit:@"gal" convertToUnit:@"L" byMultiplyingBy:3.78541178];
[converter value:20 convertedFromUnit:@"L/km" toUnit:@"gal/mi"];