AnyMeasure

Swift For Any Measure:简化版的用于Foundation.Measurement的简洁Swift接口

阅读我的相关文章 此处

要求:Swift 4.0+

动机

类型安全的数值的概念,换句话说,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

安装

Swift Package Manager

将 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