Swift For Any Measure:简化版的用于Foundation.Measurement
的简洁Swift接口
阅读我的相关文章 此处。
类型安全的数值的概念,换句话说,Measurements
听起来很棒,但不幸的是,人体工程学设计很差。 至少到目前为止是这样。 如果能这样做该多好:
let m: Mass = 123(.kilograms) + 17(.stones)
// or let m = Mass(123, .kilograms) + 17(.stones)
m.converted(to: .pounds) // 509.1688786398349 lb
而不是这样?
let m = Measurement(value: 123, unit: UnitMass.kilograms)
let m2 = m + Measurement(value: 17, unit: UnitMass.stones)
print (m2.converted(to: .pounds)) // 509.1688786398349 lb
除了繁琐之外,Foundation Unit和Measurement API也缺乏动态声明复合单位的能力。 这使得执行量纲分析和其他多步计算变得困难。
Ratio
结构允许你以类型安全的方式表达两个单位之间的比率。 将具有一种单位类型的测量值乘以分母是相同单位类型的比率,会导致这些类型抵消,从而得到具有分子类型的测量值。
例如,体积除以时间乘以时间得到体积
// Ratio of Measures
typealias FlowRate = Ratio<UnitVolume, UnitDuration>
let rate: FlowRate = 84760(.cubicFeet, per: .seconds)
let dailyFlow = (rate * 24(.hours)).converted(to: .megaliters)
// -> ~ 207371ML
将 Rate 包添加到 Package.swift
中的目标依赖项中
import PackageDescription
let package = Package(
name: "YourProject",
dependencies: [
.package(
url: "https://github.com/wildthink/anymeasure",
from: "1.0.0"
),
]
)
然后运行 swift build
命令来构建你的项目。
MIT - 参见 LICENSE.md
感谢
https://github.com/hyperjeff/Physical
Swift Measures:一个包含一组对象和协议的包,用于为Swift编程语言创建和转换测量单位。 https://bikecalc.github.io/swift-measures/documentation/measures/time https://github.com/BikeCalc/swift-measures.git