Я пытаюсь создать класс клавиатуры ввода измерений, в котором есть текстовое поле для значения и средство выбора для единицы.
У меня проблемы с использованием типа измерения из-за его общего c поведение.
Я бы хотел, чтобы мой класс возвращал новый экземпляр измерения на основе начального значения, но позволял пользователю изменять единицу измерения без обязательного ее преобразования. Я получаю сообщение об ошибке «Невозможно преобразовать значение типа« Единица »в ожидаемый тип аргумента« Т »» в строке, где я инициализирую значение «Меер» значением и единицей другого типа.
Также есть есть ли способ перебрать встроенные подъединицы типа измерения? т.е. получить, например, все подмножества UnitPressure.
Если бы кто-нибудь мог просто указать мне на ответ о подобном c поведении, это было бы очень признательно.
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)