Swift中的单位和测量



我正在尝试创建一个测量输入键盘类,该类具有用于值的文本字段和用于单位的选择器。

由于Measurement类型的一般行为,我在使用它时遇到了问题。

我希望我的类根据初始值返回一个新的Measurement实例,但允许用户在不必转换的情况下更改单位;无法将"Unit"类型的值转换为所需的参数类型"T"在我用一个值和一个不同类型的单位初始化meas的行上。

此外,是否有一种方法可以遍历维度类型的内置子单元?例如,获取UnitPressure的所有子单元。

如果有人能给我一个关于类似一般行为的答案,我将不胜感激。

class MeasurementPicker<T : Dimension> {

init(initialUnit: Measurement<T>) {
self.initUnit = initialUnit
}

var initUnit: Measurement<T>

func getUnitList() -> [Unit]? {
switch initUnit.unit.self {
case is UnitPressure:
let retUnits: [Unit]? = [
UnitPressure.bars,
UnitPressure.gigapascals,
UnitPressure.hectopascals,
UnitPressure.inchesOfMercury,
UnitPressure.kilopascals,
UnitPressure.megapascals,
UnitPressure.millibars,
UnitPressure.millimetersOfMercury,
UnitPressure.newtonsPerMetersSquared,
UnitPressure.poundsForcePerSquareInch
]
return retUnits
default:
return nil
}
}

func getNewType(index: Int) -> Measurement<T> {
let myNewUnit : Unit = getUnitList()![index]
var meas = Measurement<T>.init(value: 6, unit: myNewUnit)
}

}
let x = Measurement(value: 5.5, unit: UnitPressure.kilopascals)
let y = MeasurementPicker<UnitPressure>(initialUnit: x)
let z = y.getNewType(index: 0)
print(z.unit.symbol)

不需要创建泛型类。只需创建一个单位或维度特性。在方法getNewType中,返回Measurement<Unit>或仅返回单位或维度。您也可以使用下标从列表中获取维度:

class MeasurementPicker {
init(dimension: Dimension) { self.dimension = dimension }
var dimension: Dimension
var list: [Dimension] {
switch dimension.self {
case is UnitPressure:
return [UnitPressure.bars,
UnitPressure.gigapascals,
UnitPressure.hectopascals,
UnitPressure.inchesOfMercury,
UnitPressure.kilopascals,
UnitPressure.megapascals,
UnitPressure.millibars,
UnitPressure.millimetersOfMercury,
UnitPressure.newtonsPerMetersSquared,
UnitPressure.poundsForcePerSquareInch]
default: return []
}
}
}

用法:

let y = MeasurementPicker(dimension: UnitPressure.kilopascals)
let z = y.list[0]
print(z.symbol)   // "barn"

最新更新