Skip to content

Represent semantic versions like "1.0.0" or "1.2.3-beta1" (SemVer) in Swift

License

Notifications You must be signed in to change notification settings

sonos/SemanticVersion

This branch is 28 commits behind SwiftPackageIndex/SemanticVersion:main.

Folders and files

NameName
Last commit message
Last commit date
May 26, 2022
Sep 3, 2020
Jan 30, 2023
Jan 30, 2023
Sep 3, 2020
May 12, 2022
Oct 9, 2020
Jul 14, 2021
Jan 30, 2023
Sep 3, 2020

Repository files navigation

🏷 SemanticVersion

SemanticVersion is a simple Codable, Comparable, Equatable, Hashable, and LosslessStringConvertible struct that can represent semantic versions.

Here's what using SemanticVersion looks like in practise:

import SemanticVersion
import Foundation

// Query semantic version components
let v123 = SemanticVersion(1, 2, 3)
v123.isStable        // true
v123.isPreRelease    // false
v123.isMajorRelease  // false
v123.isMinorRelease  // false
v123.isPatchRelease  // true

// Parse semantic version from String
let v200 = SemanticVersion("2.0.0")!
v200.isStable        // true
v200.isPreRelease    // false
v200.isMajorRelease  // true
v200.isMinorRelease  // false
v200.isPatchRelease  // false

// Supports beta versions
let v300rc1 = SemanticVersion("3.0.0-rc1-test")!
v300rc1.isStable        // false
v300rc1.isPreRelease    // true
v300rc1.isMajorRelease  // false
v300rc1.isMinorRelease  // false
v300rc1.isPatchRelease  // false
v300rc1.major           // 3
v300rc1.minor           // 0
v300rc1.patch           // 0
v300rc1.preRelease      // "rc1-test"

// SemanticVersion is Comparable and Equatable
v123 < v200          // true
SemanticVersion("2.0.0")! < SemanticVersion("2.0.1")!  // true
// NB: beta versions come before their releases
SemanticVersion("2.0.0")! > SemanticVersion("2.0.0-b1")!  // true
v123 == SemanticVersion("1.2.3")  // true
SemanticVersion("v1.2.3-beta1+build5")
    == SemanticVersion(1, 2, 3, "beta1", "build5")  // true

// SemanticVersion is Hashable
let dict = [         // [{major 3, minor 0, patch 0,...
    v123: 1,
    v200: 2,
    v300rc1: 3
]

// SemanticVersion is Codable
let data = try JSONEncoder().encode(v123)  // 58 bytes
let decoded = try JSONDecoder().decode(SemanticVersion.self, from: data)  // 1.2.3
decoded == v123  // true

About

Represent semantic versions like "1.0.0" or "1.2.3-beta1" (SemVer) in Swift

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%