🏫

[Swift] |value|で絶対値を計算する

2021/10/05に公開

裏技的な方法ですが、prefixpostfixの演算子として|を定義することで実現できます。後置演算子が前置演算子より先に計算される点に注意して実装します。

struct AbsoluteValueWrapper<T: Comparable & SignedNumeric> {
    var value: T
    var absoluteValue: T {
        return abs(value)
    }
}
prefix operator |
prefix func | <T: Comparable & SignedNumeric> (value: AbsoluteValueWrapper<T>) -> T {
    return value.absoluteValue
}

postfix operator |
postfix func | <T: Comparable & SignedNumeric> (value: T) -> AbsoluteValueWrapper<T> {
    return AbsoluteValueWrapper(value: value)
}

このようにすれば以下の通り計算できます。

let (a, b) = (-42, -4.2)
print(|a|, |b|) // 42, 4.2

Discussion