sindresorhus/percentage
> A percentage type for Swift
Install
Add the following to Package.swift:
.package(url: "https://github.com/sindresorhus/Percentage", from: "3.0.0")Usage
See the source for docs.
import Percentage
10% + 5.5%
//=> 15.5%
-10% / 2
//=> -5%
(40% + 93%) * 3
//=> 399%
30% > 25%
//=> true
50%.of(200)
//=> 100
Percentage(50)
//=> 50%
Percentage(fraction: 0.5)
//=> 50%
Percentage.from(100, of: 200)
//=> 50%
Percentage.change(from: 100, to: 150)
//=> 50%
50%.fraction
//=> 0.5
10%.rawValue
//=> 10
50%.isWithinStandardRange
//=> true
150%.clamped(to: 0%...100%)
//=> 100%
110%.clampedZeroToHundred
//=> 100%
100.increased(by: 20%)
//=> 120
100.decreased(by: 20%)
//=> 80
40%.originalValueBeforeIncrease(finalValue: 120)
//=> 85.71428571428571
12%.originalValueBeforeDecrease(finalValue: 106)
//=> 120.45454545454545
90%.isPercentOf(67)
//=> 74.44444444444444
33.333%.formatted(decimalPlaces: 1)
//=> "33.3%"
// With locale (macOS 12.0+/iOS 15.0+)
50%.formatted(decimalPlaces: 1, locale: Locale(languageCode: .french))
//=> "50,0 %"
print("\(1%)")
//=> "1%"
Percentage.random(in: 10%...20%)
//=> "14.3%"The type conforms to Hashable, Codable, RawRepresentable, Comparable, ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral, Numeric, Sendable, and supports all the arithmetic operators.
SwiftUI and Cocoa overloads
Percentage overloads common SwiftUI and Cocoa APIs that accept a fraction Double, so you can pass a percentage directly:
// SwiftUI View modifiers
Text("Hello")
.opacity(45%)
.brightness(20%)
.contrast(80%)
.saturation(50%)
.grayscale(100%)
// Color and ShapeStyle
Color.red.opacity(50%)
Rectangle()
.fill(.red.opacity(50%))
// UIKit
UIColor.red.withAlphaComponent(50%)
// AppKit
NSColor.red.withAlphaComponent(50%)Codable
The percentage value is encoded as a single value:
struct Foo: Codable {
let alpha: Percentage
}
let foo = Foo(alpha: 1%)
let data = try! JSONEncoder().encode(foo)
let string = String(data: data, encoding: .utf8)!
print(string)
//=> "{\"alpha\":1}"FAQ
Can you support Carthage and CocoaPods?
No, but you can still use Swift Package Manager for this package even though you mainly use Carthage or CocoaPods.
Package Metadata
Repository: sindresorhus/percentage
Default branch: main
README: readme.md