From 2d6d59cae777429700287db71e4f87f3837ea2a8 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:39:00 +0100 Subject: [PATCH] Init from string and unit lowercased init subscript --- Sources/Units/Units.swift | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Sources/Units/Units.swift b/Sources/Units/Units.swift index 25a3eba..2f287f6 100644 --- a/Sources/Units/Units.swift +++ b/Sources/Units/Units.swift @@ -236,7 +236,7 @@ public enum Unit: String, CaseIterable, CustomStringConvertible, Codable, public var description: String { rawValue } public static subscript(rawValue: String) -> Unit? { - .init(rawValue: rawValue) + .init(rawValue: rawValue.lowercased()) } public static subscript(category: UnitCategory) -> [Unit] { @@ -273,6 +273,22 @@ public struct UnitValue: self.unit = unit } + /// Initializes from a String. eg. 100 mL + public init?(from s: String) { + let splitted = s.split(separator: " ") + guard splitted.count == 2 else { + return nil + } + + guard let unit = Unit[String(splitted[1])], + let value = Double(splitted[0]) as? ValueType + else { + return nil + } + + self.init(value: value, unit: unit) + } + // MARK: Conversion Logic /// Converts the current UnitValue to a specified target unit. /// - Parameter targetUnit: The unit to convert to.