Protocol

FixedWidthInteger

An integer type that uses a fixed size for every instance. あらゆるインスタンスに対して固定された大きさを使う整数型。

Declaration 宣言

protocol FixedWidthInteger where Self.Magnitude : FixedWidthInteger, Self.Magnitude : UnsignedInteger, Self.Stride : FixedWidthInteger, Self.Stride : SignedInteger

Overview 概要

The FixedWidthInteger protocol adds binary bitwise operations, bit shifts, and overflow handling to the operations supported by the BinaryInteger protocol. FixedWidthIntegerプロトコルは、バイナリビット単位演算子、ビットシフト、そしてオーバーフロー処理を、BinaryIntegerプロトコルによってサポートされる演算に加えます。

Use the FixedWidthInteger protocol as a constraint or extension point when writing operations that depend on bit shifting, performing bitwise operations, catching overflows, or having access to the maximum or minimum representable value of a type. For example, the following code provides a binaryString property on every fixed-width integer that represents the number’s binary representation, split into 8-bit chunks. ビットシフト、ビット単位演算の実行、オーバーフローのキャッチ、またはある型の最大限または最小限表現可能な値へのアクセスに依存する演算を記述する場合に、FixedWidthIntegerプロトコルを制約または拡張ポイントとして使ってください。例えば、以下のコードはbinaryStringプロパティをあらゆる固定長整数に関して提供します、それは数のバイナリ表現を、8ビットの塊へと分割して表します。


extension FixedWidthInteger {
    var binaryString: String {
        var result: [String] = []
        for i in 0..<(Self.bitWidth / 8) {
            let byte = UInt8(truncatingIfNeeded: self >> (i * 8))
            let byteString = String(byte, radix: 2)
            let padding = String(repeating: "0",
                                 count: 8 - byteString.count)
            result.append(padding + byteString)
        }
        return "0b" + result.reversed().joined(separator: "_")
    }
}


print(Int16.max.binaryString)
// Prints "0b01111111_11111111"
print((101 as UInt8).binaryString)
// Prints "0b11001001"

The binaryString implementation uses the static bitWidth property and the right shift operator (>>), both of which are available to any type that conforms to the FixedWidthInteger protocol. binaryString実装は、静的bitWidthプロパティと右シフト演算子(>>)を使います、それらの両方ともFixedWidthIntegerプロトコルに準拠するあらゆる型で使用可能です。

The next example declares a generic squared function, which accepts an instance x of any fixed-width integer type. The function uses the multipliedReportingOverflow(by:) method to multiply x by itself and check whether the result is too large to represent in the same type. 次の例は、総称体squared関数を宣言します、それはどんな固定長整数型のxインスタンスでも受け取ります。この関数は、multipliedReportingOverflow(by:)メソッドを使って、xをそれ自身で乗算して、結果が同じ型で表現するのに大きすぎないかどうか検査します。


func squared<T: FixedWidthInteger>(_ x: T) -> T? {
    let (result, overflow) = x.multipliedReportingOverflow(by: x)
    if overflow {
        return nil
    }
    return result
}


let (x, y): (Int8, Int8) = (9, 123)
print(squared(x))
// Prints "Optional(81)"
print(squared(y))
// Prints "nil"

Conforming to the FixedWidthInteger Protocol FixedWidthIntegerプロトコルに準拠する

To make your own custom type conform to the FixedWidthInteger protocol, declare the required initializers, properties, and methods. The required methods that are suffixed with ReportingOverflow serve as the customization points for arithmetic operations. When you provide just those methods, the standard library provides default implementations for all other arithmetic methods and operators. あなた独自のあつらえの型をFixedWidthIntegerプロトコルに準拠させるには、必須イニシャライザ、プロパティ、そしてメソッドを宣言してください。必須メソッドでReportingOverflowを末尾に付けられるものは、算術演算に対するカスタマイズポイントとして供されます。あなたが単にそれらのメソッドだけを提供する場合、標準ライブラリが省略時の実装をすべての他の算術演算メソッドと演算子に提供します。

Topics 話題

Initializers イニシャライザ

Instance Properties 様々なインスタンスプロパティ

Type Properties 型プロパティ

Instance Methods インスタンスメソッド

Type Methods 型メソッド

Operator Functions 演算子関数

Relationships 関係

Inherits From 継承元

Conforming Types これらの型が準拠

See Also 参照

Integer 整数