swiftswiftuidimensionmeasurement

SwiftUI BaseUnit implementation custom measurement


For calculating the pressure drop in a pipe, I use a pipe class with a flow parameter. I would like to implement a custom measurement for a flow rate, but I get an error:

NSInvalidArgumentException *** You must override baseUnit in your class ... to define its base unit.

My code for the flow unit dimension is:

class UnitFlow: Dimension {
    static let cubicMeterPerSecond = UnitFlow(symbol: "m3/s", converter: UnitConverterLinear(coefficient: 1.0))
    static let cubicMeterPerMinute = UnitFlow(symbol: "m3/min", converter: UnitConverterLinear(coefficient: 60.0))
    static let cubicMeterPerHour = UnitFlow(symbol: "m3/h", converter: 
    //et cetera
          
    static let baseUnit = UnitFlow(symbol: "m3/s", converter: UnitConverterLinear(coefficient: 1.0))
}

Where it goes wrong is in this line:

Text("\(pipe.flow.converted(to: UnitFlow.cubicMeterPerMinute).value)")

Any thoughts?


Solution

  • As the error suggests, you need to override baseUnit. However, this is a method - not a variable.

    Remove your current baseUnit, and replace it with the following:

    class UnitFlow: Dimension {
        /* ... */
    
        override class func baseUnit() -> Self {
            Self(symbol: "m3/s")
        }
    }