(1, 2)
の構造は、2 つの要素のカンマ区切りのリストです。パターンは特定の値ではなく値の構造を表すため、様々な値と一致させることができます。例えば、パターン (x, y)
は、タプル (1, 2)
およびその他の 2 つの要素のタプルと一致します。パターンを値と照合することに加えて、複合値の一部または全てを抽出し、各部分を定数または変数名にバインドできます。switch
文の case
ラベル、do
文の catch
句、または if
、while
、guard
、または for-in
文の case
条件で使用できます。GRAMMAR OF A PATTERN pattern → wildcard-pattern type-annotationopt pattern → identifier-pattern type-annotationopt pattern → value-binding-pattern pattern → tuple-pattern type-annotationopt pattern → enum-case-pattern pattern → optional-pattern pattern → type-casting-pattern pattern → expression-pattern
_
)で構成されます。一致する値を気にしない場合は、ワイルドカードパターンを使用します。例えば、次のコードは、ループの各反復での範囲の現在の値を無視して、閉鎖範囲 1...3
を反復します。GRAMMAR OF A WILDCARD PATTERN wildcard-pattern →_
someValue
は Int
型の値 42
に一致する識別子パターンです。42
が定数名 someValue
にバインド(代入)されます。let
キーワードで始まります。変数の名前にバインドするものは、var
キーワードで始まります。(x, y)
の各識別子パターンに let
が適用されます。このため、switch
ケースの case let (x, y):
と case (let x, let y):
は同じ値に一致します。(x, y): (Int, Int)
は、定数宣言 let (x, y): (Int, Int) = (1, 2)
の両方の要素が Int
型のタプルにのみ一致します。for-in
文のパターンとして、変数または定数宣言のパターンとして使用される場合は、ワイルドカードパターン、識別子パターン、オプショナルパターン、またはそれらを含む他のタプルパターンのみを含めることができます。例えば、タプルパターン (x, 0)
の要素 0
が式パターンのため、次のコードは有効ではありません。GRAMMAR OF A TUPLE PATTERN tuple-pattern →(
tuple-pattern-element-listopt)
tuple-pattern-element-list → tuple-pattern-element | tuple-pattern-element,
tuple-pattern-element-list tuple-pattern-element → pattern | identifier:
pattern
switch
文のケースラベル、および if
、guard
、および for-in
文の条件で使用できます。switch
文を使用する例については、Associated Values(関連値)を参照ください。Optional
は列挙型として実装されているため、.none
、.some
は、列挙型のケースと同じ switch の中で使用できます。GRAMMAR OF AN ENUMERATION CASE PATTERN enum-case-pattern → type-identifieropt.
enum-case-name tuple-patternopt
Optional<Wrapped>
列挙型の some(Wrapped)
ケースにラップされた値と一致します。オプショナルパターンは識別子パターンの直後に疑問符を置くことで構成され、列挙型ケースパターンと同じ場所に使用できます。for-in
文内のオプショナルの配列を繰り返し処理する便利な方法を提供し、nil
以外の要素に対してのみループの本文を実行します。is
パターンと as
パターンがあります。is
パターンは switch
文のケースラベルにのみ使用できます。is
と as
パターンの形式は次のとおりです。is
パターンは、実行時の値の型が、is
パターンの右側で指定された型、またはその型のサブクラスと同じ型の場合に、値と一致します。is
パターンは、両方とも型キャストを実行しますが、返された型を破棄するという点で、is
演算子のように動作します。as
パターンは、実行時の値の種類が、as
パターンの右側に指定された型、またはその型のサブクラスと同じ型の場合に、値と一致します。一致した場合、値の種類は、as
パターンの右側に指定された pattern にキャストされます。switch
文を使用して is
パターンを一致させる例については、Type Casting for Any and AnyObject(Any および AnyObject の型キャスト)を参照ください。GRAMMAR OF A TYPE CASTING PATTERN type-casting-pattern → is-pattern | as-pattern is-pattern →is
type as-pattern → patternas
type
switch
文のケースにのみ使用できます。~=
演算子を使用して入力式の値と比較されます。~=
演算子が true
を返すと、一致します。デフォルトでは、~=
演算子は ==
演算子を使用して同じ型の 2 つの値を比較します。次の例に示すように、値が範囲内に含まれているかどうかを確認することによって、範囲内の値と一致させることもできます。~=
演算子をオーバーロードして、独自の式マッチングの動作を提供できます。例えば、point
式を point の文字列表現と比較するために上記の例を書き換えることができます。