IntegerArithmeticプロトコルを実装するには、以下8つの関数を定義する必要がある。 最初の2つはComparableである。
static func ==(lhs: M, rhs: M) -> Bool static func <(lhs: M, rhs: M) -> Bool static func addWithOverflow(_ lhs: M, _ rhs: M) -> (M, overflow: Bool) static func subtractWithOverflow(_ lhs: M, _ rhs: M) -> (M, overflow: Bool) static func multiplyWithOverflow(_ lhs: M, _ rhs: M) -> (M, overflow: Bool) static func divideWithOverflow(_ lhs: M, _ rhs: M) -> (M, overflow: Bool) static func remainderWithOverflow(_ lhs: M, _ rhs: M) -> (M, overflow: Bool) func toIntMax() -> IntMax
最後の一つはswiftの最大Int(=UInt64)へ変換するものである。 このプロトコルを実装すると以下の5つの演算や関連する演算ができるようになる。
public static func +(lhs: Self, rhs: Self) -> Self public static func -(lhs: Self, rhs: Self) -> Self public static func *(lhs: Self, rhs: Self) -> Self public static func /(lhs: Self, rhs: Self) -> Self public static func %(lhs: Self, rhs: Self) -> Self
このプロトコルを用いると、通常とは異なる演算規則を持つ整数を作ることができる。 複素整数や桁数が無制限の整数などを自作することができる。