ConVerto
一个内联测量转换框架
目的
这个框架的动机是提供一个简单地将一种测量单位转换为另一种单位的方法。最初,这是由于需要将角度转换为弧度以用于旋转转换而被激发的。传统的方法如下
// State the degrees you want to convert into radians
let degrees = 180.0
// Convert by multiplying by pi and dividing the product by 180
let radians = (degrees * Double.pi) / 180.0
一个更简洁的方法是扩展你希望有初始类型的类型,将结果弧度返回为首选类型。
extension Double {
var degreesToRadians: CGFloat { return CGFloat((self * .pi) / 180) }
}
let radians = 180.0.degreesToRadians
虽然这确实解决了这个问题,但它并不能将弧度转换回角度。你可以创建另一个扩展来交换 pi 和 180,但你可能想要从英尺到厘米或英里到毫米进行线性转换。你将不得不追踪相当多的转换公式。
幸运的是,有一个 Swift 框架已经为您完成了这些工作,并且做了你预期之外很多事情。它被称为 Measurements,它能轻松地将英里转换为毫米。
let miles = Measurement(value: 12, unit: UnitLength.miles)
let millimeters = miles.converted(to: .millimeters)
//extract the value as a Double
let mm = millimeters.value
这把所有的数学都从方程中解脱出来,但这并不像通过扩展类型那样直观。这就促使我们有了这个库的目标。 ConVerto 将 Measurements 的转换能力封装到您期望使用的类型中,从而实现了易于使用的单行代码。
用法
ConVerto 通过四种数值数据类型提供一个入口点
- Int
- Double
- Float
- CGFloat
一旦拥有任何一个,即可访问ConVerto
//sample is now a Measurement type with a value of 180
let sample = 180.degrees
要将量转换为其他类型,请在语句后跟一个.to,然后自动完成会显示可用的转换。
//sample is now a Measurement type with a value of 3.1415926535...
let sample = 180.degrees.toRadians
可以通过调用三个属性中的任何一个来以三种类型提取值
- value
- fltValue
- cgValue
//Type Double of 3.1415926535...
let sampleOne: Double = 180.degrees.toRadians.value
//Type Float of 3.1415926535...
let sampleTwo: Float = 180.degrees.toRadians.fltValue
//Type CGFloat of 3.1415926535...
let sampleThree: CGFloat = 180.degrees.toRadians.cgValue
最后,您可以继续从类型到类型进行转换,直到您满意为止。
//Type Double of 3.1415926535...
let sample = 180.degrees
.toArcMinutes
.toArcSeconds
.toGradians
.toRevolutions
.toRadians.value
ConVerto框架封装了可以从「测量框架」找到的所有可用的UnitType。该框架可在此网站上找到
安装
CocoaPods
ConVerto需要CocoaPods 1.1.x或更高版本。
ConVerto可以通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中。
pod "ConVerto"
许可
ConVerto采用MIT许可发布。有关更多信息,请查看LICENSE文件。