Protocol

RawRepresentable

A type that can be converted to and from an associated raw value. ある結び付けられた生の値へおよびそれから変換できる型。

Declaration 宣言

protocol RawRepresentable

Overview 概要

With a RawRepresentable type, you can switch back and forth between a custom type and an associated RawValue type without losing the value of the original RawRepresentable type. Using the raw value of a conforming type streamlines interoperation with Objective-C and legacy APIs and simplifies conformance to other protocols, such as Equatable, Comparable, and Hashable. RawRepresentable型で、あなたはあつらえの型と関連RawValue型との間を行ったり戻ったり切り替えることが元のRawRepresentable型の値の損失なしに可能です。準拠する型の生の値を使うことは、Objective-CおよびレガシーAPIとの相互運用を能率的にします、そして他のプロトコル、例えばEquatableComparable、およびHashableなどへの準拠を簡単にします。

The RawRepresentable protocol is seen mainly in two categories of types: enumerations with raw value types and option sets. RawRepresentableプロトコルが主に見られるのは、2つの部類の型:列挙で生の値型を持つものとオプションセットにおいてです。

Enumerations with Raw Values 生の値を持つ列挙

For any enumeration with a string, integer, or floating-point raw type, the Swift compiler automatically adds RawRepresentable conformance. When defining your own custom enumeration, you give it a raw type by specifying the raw type as the first item in the enumeration’s type inheritance list. You can also use literals to specify values for one or more cases. 文字列、整数、または浮動小数点の生の型を持つ何らかの列挙に対して、Swiftコンパイラは自動的にRawRepresentable準拠を加えます。あなた独自のあつらえの列挙を定義している場合、あなたはそれに生の型を与えることを、その生の型を列挙の型継承リストの最初の項目として指定することによって行います。あなたはまた、リテラルを使うことで値を1つ以上のケース節に指定することができます。

For example, the Counter enumeration defined here has an Int raw value type and gives the first case a raw value of 1: 例えば、ここで定義されるCounter列挙は、Intの生の値型を持ち、そして最初のケース節に生の値の1を与えます:


enum Counter: Int {
    case one = 1, two, three, four, five
}

You can create a Counter instance from an integer value between 1 and 5 by using the init?(rawValue:) initializer declared in the RawRepresentable protocol. This initializer is failable because although every case of the Counter type has a corresponding Int value, there are many Int values that don’t correspond to a case of Counter. あなたはCounterインスタンスを1と5の間の整数値から作成することが、RawRepresentableプロトコルにおいて宣言されるinit?(rawValue:)イニシャライザを使うことによって可能です。このイニシャライザは失敗可能です、なぜならすべてのCounter型のケース節は対応するInt値を持つけれども、Counterのケース節に対応しない多くのInt値が存在するからです。


for i in 3...6 {
    print(Counter(rawValue: i))
}
// Prints "Optional(Counter.three)"
// Prints "Optional(Counter.four)"
// Prints "Optional(Counter.five)"
// Prints "nil"

Option Sets オプションセット

Option sets all conform to RawRepresentable by inheritance using the OptionSet protocol. Whether using an option set or creating your own, you use the raw value of an option set instance to store the instance’s bitfield. The raw value must therefore be of a type that conforms to the FixedWidthInteger protocol, such as UInt8 or Int. For example, the Direction type defines an option set for the four directions you can move in a game. オプションセットすべては、RawRepresentableへの準拠をOptionSetプロトコルを使って継承することによって行います。あるオプションセットを使用するかあなた自身で作成する場合、あなたはオプションセットインスタンスの生の値を使って、そのインスタンスの持つビットフィールドを格納します。生の値はしたがって、FixedWidthIntegerプロトコルに準拠する型、例えばUInt8またはIntなどのものでなければなりません。例えば、Direction型はオプションセットをあるゲームにおいてあなたが動かせる4つの方向のために定義します。


struct Directions: OptionSet {
    let rawValue: UInt8


    static let up    = Directions(rawValue: 1 << 0)
    static let down  = Directions(rawValue: 1 << 1)
    static let left  = Directions(rawValue: 1 << 2)
    static let right = Directions(rawValue: 1 << 3)
}

Unlike enumerations, option sets provide a nonfailable init(rawValue:) initializer to convert from a raw value, because option sets don’t have an enumerated list of all possible cases. Option set values have a one-to-one correspondence with their associated raw values. 列挙と異なり、オプションセットは生の値から変換するために失敗できないinit(rawValue:)イニシャライザを提供します、なぜならオプションセットは可能な場合全てを列挙したリストを持たないからです。オプションセット値それらは、それらの関連する生の値と一対一の対応を持ちます。

In the case of the Directions option set, an instance can contain zero, one, or more of the four defined directions. This example declares a constant with three currently allowed moves. The raw value of the allowedMoves instance is the result of the bitwise OR of its three members’ raw values: Directionsオプションセットの場合では、あるインスタンスは4つ定義された方向のうちゼロ、1つ、またはそれ以上を含むことができます。この例は3つの現在許される動きを持つある定数を宣言します。allowedMovesインスタンスの生の値は、それの3つのメンバの持つ生の値のビット単位ORの結果です:


let allowedMoves: Directions = [.up, .down, .left]
print(allowedMoves.rawValue)
// Prints "7"

Option sets use bitwise operations on their associated raw values to implement their mathematical set operations. For example, the contains() method on allowedMoves performs a bitwise AND operation to check whether the option set contains an element. オプションセットは、ビット単位演算をそれらの関連する生の値上で使うことで、それらの数学的集合演算を実施します。例えば、contains()メソドはallowedMoves上で、ビット単位AND演算を実行して、オプションセットがある要素を含むかどうか調べます。


print(allowedMoves.contains(.right))
// Prints "false"
print(allowedMoves.rawValue & Directions.right.rawValue)
// Prints "0"

Topics 話題

Creating a Value 値の作成

Accessing the Raw Value 生の値にアクセスする

Comparing Values 値の比較

Decoding a Value 値をデコードする

These initializer overloads are available for any conforming type with a RawValue that is a Decodable standard library type. これらのイニシャライザオーバーロードは、Decodable標準ライブラリ型であるRawValueを持つどんな準拠する型でも利用可能です。

Encoding a Value 値をエンコードする

These overloads are available for any conforming type with a RawValue that is an Encodable standard library type. これらのイニシャライザオーバーロードは、Encodable標準ライブラリ型であるRawValueを持つどんな準拠する型でも利用可能です。

Initializers イニシャライザ

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

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

Relationships 関係

Inherited By 継承される先

Conforming Types これらの型が準拠

See Also 参照

Raw Representation 生の表現