プロトコル


RawRepresentable


関連付けられている生の値との間で変換できる型。


iOS 8.0+ iPadOS 8.0+ Mac Catalyst 13.0+ macOS 10.10+

tvOS 9.0+ visionOS 1.0+ watchOS 2.0+

protocol RawRepresentable





概観


RawRepresentable 型を使用すると、元の RawRepresentable 型の値を失うことなく、カスタム型と関連した RawValue 型を切り替えることができます。準拠型の生の値を使用すると、Objective-C およびレガシー (古い) API との操作が効率化され、Equatable、Comparable、Hashable などの他のプロトコルへの準拠が簡素化されます。


RawRepresentable プロトコルは、主に生の値型とオプションセットを持つ列挙型の 2 つのカテゴリの型で使用されます。



生の値を持つ列挙型


文字列、整数、または浮動小数点の生の型を持つ列挙型の場合、Swift コンパイラは自動的に RawRepresentable の準拠を追加します。あなたが独自のカスタム列挙型を定義するときは、列挙型の型継承リストの最初の項目として生の型を指定して、生の型を指定して下さい。リテラルを使用して、1 つ以上のケースの値を指定することもできます。


たとえば、ここで定義されている Counter 列挙型には Int の生の値型があり、最初のケースに生の値 1 が与えられます。


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

RawRepresentable プロトコルで宣言されている init?(rawValue:) イニシャライザを使用して、1 から 5 までの整数値から Counter インスタンスを作成できます。このイニシャライザは失敗する可能性があります。これは、Counter 型のすべてのケースには対応する Int 値がありますが、Counter のケースに対応 しない Int 値が多数あるためです。


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


Option Sets


Option sets (オプションセット) はすべて、OptionSet プロトコルを使用した継承によって RawRepresentable に準拠します。オプションセットを使用する場合でも、独自のオプションセットを作成する場合でも、オプションセットインスタンスの生の値を使用してインスタンスのビットフィールドを格納して下さい。したがって、生の値は、UInt8Int など、FixedWidthInteger プロトコルに準拠する型でなければなりません。たとえば、以下の Direction 型は、ゲーム内で移動できる 4 つの方向のオプションセットを定義します。


  1. struct Directions: OptionSet {
  2. let rawValue: UInt8
  3. static let up     = Directions(rawValue: 1 << 0)
  4. static let down = Directions(rawValue: 1 << 1)
  5. static let left   = Directions(rawValue: 1 << 2)
  6. static let right = Directions(rawValue: 1 << 3)
  7. }

列挙型とは異なり、オプションセットには、すべての可能なケースの列挙リストがないため、生の値から変換するための失敗しない init(rawValue:) イニシャライザが用意されています。オプションセットの値は、関連した生の値と 1 対 1 で対応します。


Directions オプションセットの場合、インスタンスには、定義されている 4 つの方向のうち 0、1、またはそれ以上を含めることができます。この例では、現在許可されている 3 つの移動方向を含む定数を宣言しています。 allowedMoves インスタンスの生の値は、その 3 つのメンバーの生の値をビット単位で OR した結果です。


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

オプションセットは、関連した生の値に対するビット単位の演算を使用して、数学的なセット演算を実装します。たとえば、allowedMovescontains() メソッドは、ビット単位の AND 演算を実行して、オプションセットに要素が含まれているかどうかを確認します。


  1. print(allowedMoves.contains(.right))
  2. // Prints "false"
  3. print(allowedMoves.rawValue & Directions.right.rawValue)
  4. // Prints "0"




トピックス


値の作成


init?(rawValue: Self.RawValue)

指定された生の値を持つ新しいインスタンスを作成します。

必須



生の値へのアクセス


var rawValue: Self.RawValue

生の型の対応する値。

必須


associatedtype RawValue

準拠する型のすべての値を表すために使用できる生の型。

必須



値の比較


func == <T>(T, T) -> Bool

2 つの引数が等しいかどうかを示すブール値を返します。


func != <T>(T, T) -> Bool

2 つの引数が等しくないかどうかを示すブール値を返します。


func != <T>(T, T) -> Bool

2 つの引数が等しくないかどうかを示すブール値を返します。



値の復号


これらのイニシャライザのオーバーロードは、Decodable 標準ライブラリ型である RawValue を持つ任意の準拠型で使用できます。


init(from: any Decoder) throws

型の RawValueString の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueBool の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueDouble の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueFloat の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueInt の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueUInt の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueInt8 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueInt16 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueInt32 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueInt64 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueUInt8 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueUInt16 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueUInt32 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueUInt64 の場合、与えられた復号器から復号して新しいインスタンスを作成します。



値のコード化


これらのオーバーロードは、Encodable 標準ライブラリ型である RawValue を持つ任意の準拠型で使用できます。


func encode(to: any Encoder) throws

型の RawValueString の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueBool の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueDouble の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueFloat の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueInt の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueUInt の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueInt8 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueInt16 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueInt32 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueInt64 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueUInt8 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueUInt16 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueUInt32 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueUInt64 の場合、この値を与えられたエンコーダにコード化します。



イニシャライザ


init?<T>(codingKey: T)


init?<T>(codingKey: T)


init(from: any Decoder) throws

型の RawValueUInt128 の場合、与えられた復号器から復号して新しいインスタンスを作成します。


init(from: any Decoder) throws

型の RawValueInt128 の場合、与えられた復号器から復号して新しいインスタンスを作成します。



インスタンスプロパティ


var codingKey: any CodingKey


var codingKey: any CodingKey


var hashValue: Int



インスタンスメソッド


func encode(to: any Encoder) throws

型の RawValueInt128 の場合、この値を与えられたエンコーダにコード化します。


func encode(to: any Encoder) throws

型の RawValueUInt128 の場合、この値を与えられたエンコーダにコード化します。


func hash(into: inout Hasher)



型エイリアス


typealias AtomicOptionalRepresentation

Optional のアトミック操作で使用する場合に適した型である Optional<Self> にコード化および復号する記憶装置の表現型。


typealias AtomicRepresentation

Self がコード化および復号する記憶装置表現型は、アトミック操作で使用する場合に適した型です。



型メソッド


static func decodeAtomicOptionalRepresentation(consuming Self.RawValue.AtomicOptionalRepresentation) -> Self?

Optional のアトミック操作から返された AtomicOptionalRepresentation 記憶領域インスタンスを破棄することにより、論理アトミック型 Self? を回復します。


static func decodeAtomicRepresentation(consuming Self.RawValue.AtomicRepresentation) -> Self

アトミック操作から返された AtomicRepresentation 記憶領域インスタンスを破棄することにより、論理アトミック型の Self を回復します。


static func encodeAtomicOptionalRepresentation(consuming Self?) -> Self.RawValue.AtomicOptionalRepresentation

Self の値を破棄し、Optional のアトミック操作に使用する AtomicOptionalRepresentation 記憶領域型を準備します。


static func encodeAtomicRepresentation(consuming Self) -> Self.RawValue.AtomicRepresentation

Self の値を破棄し、アトミック操作に使用する AtomicRepresentation 記憶領域型を準備します。





関連


以下により継承


OptionSet



準拠する型


CodingUserInfoKey

FloatingPointSign

String.Encoding

TaskPriority

Unicode.CanonicalCombiningClass





以下も見よ


Raw Representation (生の表現)


protocol CaseIterable

そのすべての値のコレクションを提供する型。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ