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.