## AnyMeasure

### 1.0.0

Swift For Any Measure: Simplified

### Initial Release

###### 2022-05-28T18:43:44Z

This is the initial release of the AnyMeasure Swift Package.

# AnyMeasure

Swift For Any Measure: Simplified A clean, Swift interface for `Foundation.Measurement`

Read my post about it here.

## Motivation

The idea of type-safe numeric values, in other words, `Measurements` sounds great but, alas, the ergonomics are poor. At least until now. Wouldn't it be great to do this

```    let m: Mass = 123(.kilograms) + 17(.stones)
// or let m = Mass(123, .kilograms) + 17(.stones)
m.converted(to: .pounds) // 509.1688786398349 lb```

instead of this?

```    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```

In addition to its verboseness, the Foundation Unit and Measurement APIs also lack the ability to dynamically declare compound units. This can make it difficult to perform dimensional analysis and other multi-step calculations.

The `Ratio` structure allows you to express the ratio between two units in a type-safe manner Multiplying a measurement with one unit type by a rate whose denominator is that same unit type causes those types to cancel out, resulting in a measurement with the numerator type.

## Usage

For example, volume over time multiplied by time yields volume:

```    // Ratio of Measures
typealias FlowRate = Ratio<UnitVolume, UnitDuration>

let rate: FlowRate = 84760(.cubicFeet, per: .seconds)
let dailyFlow = (rate * 24(.hours)).converted(to: .megaliters)

// -> ~ 207371ML```

## Installation

### Swift Package Manager

Add the Rate package to your target dependencies in `Package.swift`:

```import PackageDescription

let package = Package(
name: "YourProject",
dependencies: [
.package(
url: "https://github.com/wildthink/anymeasure",
from: "1.0.0"
),
]
)```

Then run the `swift build` command to build your project.

## License Information

MIT - See LICENSE.md

## Credits

Thanks to

### Description

• Swift Tools 5.6.0

### Dependencies

Last updated: Sat Sep 23 2023 22:21:08 GMT-0900 (Hawaii-Aleutian Daylight Time)