(…) 例如,长度是一个 物理量。米是一个长度的单位,代表一个确定的预定长度。当你说 10 米(或 10 m)时,我们实际上是指 10 倍的预定长度,称为 米 – 维基百科
UnitKit 是一个用于在 Swift 中创建、转换和比较单位和物理量的简单框架。
它支持数量运算和比较,以及直接支持多个单位的单位转换。如果您需要 UnitKit 不支持的单位,随时提交 pull 请求。
从技术的角度来看,UnitKit 实现了 Martin Fowler 在本文中描述的 Quantity 模式。
使用 UnitKit,您可以添加和减去数量,也可以通过标量乘以和除以数量。
在添加和减去数量的操作中,结果将具有第一个数量的相同单位。下面,结果是米,因为 5 米 是操作中的第一个数量。
let fiveMeters = Quantity(5, unit: Length.meter)
let tenInches = Quantity(10, unit: Length.inch)
let twoYards = Quantity(2, unit: Length.yard)
var result = fiveMeters + tenInches
// 5.254 m
result = fiveMeters + tenInches - twoYards
// 3.4252 m
result = 2 * fiveMeters
// 10.0 m
result = tenInches / 2
// 5.0 in
单位转换尊重单位类别。不同单位类别之间的转换将导致编译错误。
换句话说,长度可以被转换为长度,面积转换为面积,依此类推。
let twoYards = Quantity(2, unit: Length.yard)
let result = twoYards.convertTo(Length.meter)
// 1.8288 m
存在以下数量比较:>、>=、<、<=、== 和 ~==。
应使用 == 操作符来比较表示相同单位的物理量。
let tenMeters = Quantity(10, unit: Length.meter)
let anotherTenMeters = 2 * Quantity(5, unit: Length.meter)
let result = tenMeters == anotherTenMeters
// true
let tenMeters = Quantity(10, unit: Length.meter)
let fifteenMeters = 3 * Quantity(5, unit: Length.meter)
let result = tenMeters == fifteenMeters
// false
应使用 ~== 操作符来比较来自同一类别的物理量。
let speed_kph = Quantity(72, unit: kilometerPerHour)
let speed_mph = Quantity(44.7390837508948, unit: milePerHour)
let result = speed_kph ~== speed_mph
// true
UnitKit的目标是实现这个维基百科页面上的大多数度量单位。目前,只实现了最常用的单位。
但UnitKit的设计允许自定义。可以扩展一个分类以添加新的单位,甚至创建带有自己单位的新的分类。
要扩展现有分类,创建一个包含新单位定义的扩展。例如
extension Volume {
static let gole = Unit<Volume>(name: "gole de cerveja", symbol: "gol", ratio: 6e-1)
}
let umGole = Quantity(1, unit: Volume.gole)
let result = umGole.convertTo(Volume.liter)
// 0.6 l
要创建一个新的分类,创建一个新的struct
并为新分类实现单位定义。例如
struct Force {
static let newton = Unit<Force>(name: "newton", symbol: "N", ratio: 1)
static let poundForce = Unit<Force>(name: "pound force", symbol: "lbf", ratio: 4448e-3)
}
let force = Quantity(0.3, unit: Force.newton)
let result = force.convertTo(Force.poundForce)
// 0.0674460431654676 lbf
想要贡献?太好了!
git checkout -b my_awesome_feature
)git commit -am "添加新酷特性"
)git push origin my_awesome_feature
)版权©2016 Otavio Cordeiro。保留所有权利。
在此特此许可,任何人获得本软件和相关文档文件(“软件”)的副本后,可以无限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许软件提供者进行此类操作,前提是遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明确或隐含的保证,包括但不限于商销性、适用于特定目的和非侵权的保证。在任何情况下,作者或版权所有者不应对任何主张、损害或其他责任负责,无论是在合同行为、侵权行为还是其他行为中,源于、源于或与软件或软件的使用或其他使用方式有关。