Мы пытаемся написать простую функцию усиления / убытка, которая возвращает цвет, основанный на значении относительно нуля. Если это положительно, мы возвращаем зеленый. Если отрицательный, мы возвращаем красный. Если ноль, мы возвращаем серый.
Текущая функция написана специально для двойного, например:
func getChangeColor(value:Double) -> UIColor {
if value > 0 {
return Theme.Colors.gain
} else if value < 0 {
return Theme.Colors.loss
} else {
return Theme.Colors.noChange
}
}
Но мне интересно, можно ли его обновить, чтобы оно приняло любое числовое значение?
Моей первой мыслью было написать это против Comparable
, но проблема в том, что нам нужно сравнить его с нулем в том же типе, что бы это ни было.
В других языках, таких как C #, вы можете получить значение по умолчанию для типа, которое в случае чисел равно нулю. У Свифта есть что-нибудь подобное? Если это так, мы могли бы сделать это ...
func getChangeColor<T:Comparable>(value:T) -> UIColor {
let defaultValue = default(T.self)
if value > defaultValue {
return Theme.Colors.gain
} else if value < defaultValue {
return Theme.Colors.loss
} else {
return Theme.Colors.noChange
}
}
... или этот подход вообще неверен?