語彙の構造


Swift の 語彙の構造 は、一連の文字が形作る言語の有効なトークンを説明しています。これらの有効なトークンは、言語の最下位レベルのブロックを形成し、後に続く章で残りの言語の部分を記述するために使用されます。トークンは、識別子、キーワード、句読点、リテラル、または演算子で構成されています。


ほとんどの場合、トークンは以下に指定された文法の制約内で、入力テキストからできるだけ長い部分文字列を考慮して Swift のソースファイルの文字から生成されます。この動作は、最長一致 または 最大かじりつき と呼ばれています。



空白とコメント


空白には2つの用途があります:ソースファイルでトークンを分ける用途と、演算子が接頭辞または接尾辞 (演算子 を参照) かを決定するのに役立ちますが、それ以外は無視されます。以下の文字は空白文字と見なされます:スペース (U+0020)、ラインフィード(U+000A)、キャリッジリターン (U+000D)、水平タブ (U+0009)、垂直タブ (U+000B)、フォームフィード (U+000C)、そしてヌル (U+0000)。


コメントは、コンパイラによって、空白として扱われます。一行のコメントは、// で始まり、ラインフィード (U+000A) またはキャリッジリターン (U+000D) まで続きます。複数行のコメントは、/* で始まり、*/ で終わります。複数の行のコメントをネストすることは許可されていますが、コメントのマーカーは、バランスをとらなければなりません。


空白の文法

whitespacewhitespace-item ­whitespace opt
­ whitespace-itemline-break
­ whitespace-itemcomment­
whitespace-itemmultiline-comment
whitespace-item → U+0000, U+0009, U+000B, U+000C, or U+0020

line-break → U+000A
line-break → U+000D
line-break → U+000D followed by U+000A

comment → // ­comment-text ­line-break
­ multiline-comment → /* multiline-comment-text */

­ comment-textcomment-text-item comment-text­ opt­
comment-text-item → Any Unicode scalar value except U+000A or U+000D

multiline-comment-textmultiline-comment-text-item­ multiline-comment-text opt
­ multiline-comment-text-itemmultiline-comment
­ multiline-comment-text-itemcomment-text-item
multiline-comment-text-item → Any Unicode scalar value except /*­ or */



マークアップの書式リファレンス で説明したように、コメントは追加の書式やマークアップを含むことができます。


識別子


識別子 は、A から Z の大文字または小文字の文字か、アンダースコア (_) で始まる、基本多言語面での、非結合英数字の Unicode 文字、または私用領域にない基本多言語面外の文字で始まります。最初の文字の後、数字と結合 Unicode 文字もまた許可されています。


識別子として予約語を使用するには、前と後にバッククォート(`) を置きます。例えば、class は有効な識別子ではなく、`class` は有効です。バッククォートは、識別子の一部とは見なされず、'x' および x は同じ意味を持ちます。


明示的でないパラメータ名を持つクロージャの内部では、パラメータは暗黙のうちに $0,$1,$2, などなどという名前が付けられます。これらの名前は、クロージャの範囲内で有効な識別子です。


識別子の文法

identifieridentifier-head­ identifier-characters­ opt­
identifier` ­identifier-head­ identifier-characters­ opt­`
identifierimplicit-parameter-name­
identifier-listidentifieridentifier­ , ­identifier-list

identifier-head → Upper- or lowercase letter A through Z
identifier-head → _
­ identifier-head → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA
identifier-head → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, or U+00F8–U+00FF
identifier-head → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, or U+180F–U+1DBF
identifier-head → U+1E00–U+1FFF
identifier-head → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, or U+2060–U+206F
identifier-head → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, or U+2776–U+2793
identifier-head → U+2C00–U+2DFF or U+2E80–U+2FFF
identifier-head → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, or U+3040–U+D7FF
identifier-head → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, or U+FE30–U+FE44
identifier-head → U+FE47–U+FFFD
identifier-head → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, or U+40000–U+4FFFD
identifier-head → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, or U+80000–U+8FFFD
identifier-head → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, or U+C0000–U+CFFFD
identifier-head → U+D0000–U+DFFFD or U+E0000–U+EFFFD

identifier-character → Digit 0 through 9
identifier-character → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, or U+FE20–U+FE2F
identifier-characteridentifier-head
­ identifier-charactersidentifier-character ­identifier-characters ­opt
­
implicit-parameter-name → $ ­decimal-digits­



キーワードと句読点


以下のキーワードは予約されており、それらはバッククォートでエスケープしている場合を除き、上記で 識別子 に述べたように、識別子としては使用できません。inout,var, 及び let 以外のキーワードは、バッククォートでエスケープすることなく関数宣言や関数呼び出しのパラメータ名として使用できます。メンバがキーワードと同じ名前を持つ場合、そのメンバへの参照は、メンバへの参照とキーワードの間に曖昧さがある場合を除いて、バッククォートでエスケープする必要はなく、例えば self,Type および Protocol がメンバ式を明示的に特殊な意味を持っている場合、それらはその文脈でバッククォートでエスケープしなければなりません。


以下のトークンは、句読点として予約されており、カスタム演算子として使用できません。(, ), {, }, [, ], ., ,, :, ;, =, @, #, &(接頭辞演算子として)、->, `, ?, そして ! (接尾辞演算子として)。



リテラル


リテラル は、数値や文字列などの型の値をソースコードで表現したものです。


リテラルの例を次に示します。


  1. 42                        // Integer literal
  2. 3.14159                // Floating-point literal
  3. "Hello, world!"    // String literal
  4. true                        // Boolean literal


リテラルには、それ独自の型はありません。その代わりに、リテラルは無限の精度を記述し、Swift の型推論はリテラルの型を推測しようとします。たとえば、let x: Int8 = 42 の宣言では、Swift は整数リテラル 42 の型は Int8 であることを推測するのに (:Int8) の明示的な型注釈を使用しています。利用可能な適切な型の情報がない場合には、Swift は、リテラルの型は Swift の標準ライブラリで定義されたデフォルトのリテラル型の一つであることを推測します。デフォルトの型は、整数リテラルの場合 Int、浮動小数点リテラルの場合 Double>、文字列リテラルの場合 String、およびブール値リテラルの場合 Bool です。たとえば、let str =”Hello,world" 宣言の中で、文字列リテラルの "Hello,world" のデフォルトに推論された型は String です。


リテラル値の型注釈を指定する場合は、注釈の型は、そのリテラル値からインスタンス化することができる型でなければなりません。すなわち、型は、Swift の以下の標準ライブラリプロトコルの一つに準拠しなければならず、整数リテラルでは ExpressibleByIntegerLiteral に、浮動小数点リテラル では ExpressibleByFloatLiteral に、文字列リテラルでは ExpressibleByStringLiteral に、ブール値リテラルでは ExpressibleByBooleanLiteral に、単一の Unicode スカラだけを含む文字列リテラルは ExpressibleByUnicodeScalarLiteral に、単一の拡張書記素クラスタだけを含む文字列リテラルでは ExpressibleByExtendedGraphemeClusterLiteral に準拠しなければなりません。たとえば、Int8ExpressibleByIntegerLiteral プロトコルに準拠し、そのため、let x: Int8 = 42 宣言で整数リテラル 42 の型注釈で使用できます。


リテラルの文法

literal numeric-literal | string-literal | boolean-literal | nil-literal
numeric-literal → - opt integer-literal- opt floating-point-literal
boolean-literal true­ | false­
nil-literal nil



整数リテラル


整数リテラル は、不特定の精度の整数値を表します。デフォルトでは、整数リテラルは十進で表現されます。接頭辞を使用して別の基数を指定できます。二進数のリテラルは 0b で始まり、八進リテラルは 0o で始まり、十六進リテラルは 0x で始まります。


十進リテラルは 0 から9 の数字を含み、二進リテラルは、01 の数字を含み、八進リテラルは 0 から7 を含み、十六進リテラルは 0 から 9 までと、同様に大文字または小文字の A から F を含みます。


負の整数リテラルは、-42 のように、整数リテラルにマイナス記号 (-) を付けて表されます。


アンダースコア (_)は、読みやすさのため数字の間に置くことを認められていますが、無視され、そのためリテラルの値に影響を与えません。整数リテラルは先頭をゼロ (0) で始めることができますが、それらは同様に無視され、リテラルの基数や値には影響しません。


特に指定しない限り、整数リテラルのデフォルトの推論された型は、Swift の標準ライブラリの型 Int です。整数 で説明したように、Swift 標準ライブラリも、符号付きと符号なし整数の様々なサイズの型を定義しています。


整数リテラルの文法

integer-literalbinary-literal
integer-literaloctal-literal
­ integer-literaldecimal-literal
­ integer-literalhexadecimal-literal
­
binary-literal0b ­binary-digit ­binary-literal-characters opt
binary-digit → Digit 0 or 1
binary-literal-characterbinary-digit |­ _
­ binary-literal-charactersbinary-literal-character­ binary-literal-characters opt

octal-literal0o ­octal-digit ­octal-literal-characters opt
octal-digit → Digit 0 through 7
octal-literal-characteroctal-digit­ | _
­ octal-literal-charactersoctal-literal-character ­octal-literal-characters opt

decimal-literaldecimal-digit­ decimal-literal-characters opt
decimal-digit → Digit 0 through 9
decimal-digitsdecimal-digit ­decimal-digits opt
­ decimal-literal-characterdecimal-digit |­ _
­ decimal-literal-charactersdecimal-literal-character­ decimal-literal-characters opt

hexadecimal-literal0x ­hexadecimal-digit ­hexadecimal-literal-characters opt
­ hexadecimal-digit → Digit 0 through 9, a through f, or A through F
hexadecimal-literal-characterhexadecimal-digit |­ _
hexadecimal-literal-charactershexadecimal-literal-character ­hexadecimal-literal-characters opt



浮動小数点リテラル


浮動小数点リテラル は、不特定の精度の浮動小数点値を表します。


デフォルトでは、浮動小数点リテラルは (接頭辞なしで) 十進数で表されますが、また(0x の接頭辞で) 十六進数で表すこともできます。


十進浮動小数点リテラルは、十進数の桁から成り、小数、十進の指数、あるいはその両方が続くシークエンスで構成されています。小数は、小数点 (.) に十進数が続くシーケンスで構成されています。指数は、大文字または小文字の e の接頭辞とそれに続く小数点以下の桁のシーケンスで構成され、e の前の値に 10 の累乗を掛けた値を示します。たとえば、1.25e2 は 1.25×10 2 を表し、125.0 と等しくなります。同様に、1.25e-2 は 1.25×10 -2 を表し、0.0125 に等しくなります。


十六進浮動小数点リテラルは、0x の接頭辞に続いて、オプションで十六進数の小数が続き、十六進数の指数が続いて構成されています。十六進の小数は、小数点とそれに続く十六進数のシーケンスで構成されています。指数部は大文字または小文字の p 接頭辞と、それに続く、2 の何乗かを示す値の十進数のシークエンスが続きます。たとえば、0xFp2 は 015×22 を表し、これは 60 と等しく、同様に 0xFp-2 は 15×2-2 を表し、3.75 と等しくなります。


負の浮動小数点数は、-42.5 のように、浮動小数点リテラルにマイナス符号 (-)を前に付けることによって表されます。


アンダースコア(_) は、読みやすくするために数字の間に置く事を許可されていますが、無視され、リテラルの値に影響を与えません。浮動小数点リテラルは、先頭をゼロ(0) で始めることができますが、同様に無視され、リテラルの基数または値には影響しません。


特に指定しない限り、浮動小数点リテラルのデフォルトの推論された型は、64 ビットの浮動小数点数を表す、 Double の Swift 標準ライブラリの型です。Swift の標準ライブラリはまた、32 ビット浮動小数点数を表す Float 型も定義しています。


浮動小数点リテラルの文法

floating-point-literaldecimal-literal­ decimal-fraction opt ­decimal-exponent opt
floating-point-literalhexadecimal-literal ­hexadecimal-fraction opt ­hexadecimal-exponent

decimal-fraction. ­decimal-literal
decimal-exponentfloating-point-e ­sign­ opt ­decimal-literal

hexadecimal-fraction. ­hexadecimal-digit ­hexadecimal-literal-characters opt
hexadecimal-exponentfloating-point-p ­sign opt ­decimal-literal

floating-point-ee­ | E
­ floating-point-ppP
sign+-­



文字列のリテラル


文字列リテラルは、引用符で囲まれた一連の文字列です。単一の行の文字列リテラルは二重引用符で囲まれ、以下の形式をとります。


"


文字列のリテラルは、エスケープされていない二重引用符 (")、エスケープされていないバックスラッシュ (\)、キャリッジリターン、またはラインフィードをを含めることはできません。


複数行の文字列リテラルは、3つの二重引用符で囲まれ、以下の形式です。


"""

"""



単一行の文字列リテラルとは異なり、複数行の文字列リテラルには、エスケープされていない二重引用符 (")、キャリッジリターン、ラインフィードを含めることができます。3つのエスケープされていない二重引用符を互いに隣接して含むことはできません。


複数行の文字列リテラルを開始する """ の後の改行は文字列の一部ではありません。リテラルを終了する """ の前の改行もまた文字列の一部ではありません。改行で始まる行または改行で終わる複数行の文字列リテラルを作成するには、最初または最後の行に空行を記述します。


複数行の文字列リテラルは、空白とタブの任意の組み合わせを使用してインデントすることができます。このインデントは文字列には含まれません。リテラルを終了する """ が、インデントを決定します。リテラル内の空白でない行はすべて、終了する """ の前に表示されるインデントとまったく同じインデントで始まらなければなりません。タブとスペースの間を変えてはいけません。そのインデントの後にスペースとタブを追加することができます。それらのスペースとタブが文字列に表示されます。


複数行文字列リテラルの改行は、ラインフィードの文字を使用するために正規化されます。ソースファイルにキャリッジリターンとラインフィードが混在していても、文字列の改行はすべて同じになります。


複数行の文字列リテラルでは、行の最後にバックスラッシュ (\) を書くと、その文字列から改行が削除されます。バックスラッシュと改行の間の空白も省略されます。この構文を使用して、結果の文字列の値を変更することなく、ソースコード内で複数行の文字列リテラルをハードラップ (hard wrap) することができます。


以下のエスケープシーケンスを使用して、単一行と複数行形式の両方の文字列リテラルに特殊文字を含めることができます。


式の値は、バックスラッシュ (\) の後の括弧内に式を配置することによって文字列リテラル内に挿入できます。補間された式は、文字列リテラルを含められますが、エスケープされていないバックスラッシュ (\)、キャリッジリターン、またはラインフィードをを含めることはできません。


たとえば、以下のすべての文字列リテラルは同じ値を持っています:


  1. "1 2 3"
  2. "1 2 \("3")"
  3. "1 2 \(3)"
  4. "1 2 \(1 + 2)"
  5. let x = 3; "1 2 \(x)"


文字列リテラルのデフォルトの推論された型は String です。String 型の詳細については、文字列と文字 と、文字列の構造リファレンス を参照してください。


+ 演算子で連結された文字列リテラルは、コンパイル時に連結されます。たとえば、以下の例の textAtextB の値は、同一です。実行時の連結は行なわれません。


  1. let textA = "Hello " + "world"
  2. let textB = "Hello world"


文字列リテラルの文法

string-literalstatic-string-literal | interpolated-string-literal

static-string-literal → " ­quoted-text­ opt ­"
static-string-literal → """­multiline-quoted-text ­opt"""­

quoted-textquoted-text-item ­quoted-text opt
quoted-text-itemescaped-character
­ quoted-text-item → Any Unicode scalar value except ", \­, U+000A, or U+000D

multiline-quoted-textmultiline-quoted-text-item ­multiline-quoted-text ­opt
multiline-quoted-text-itemescaped-character­
multiline-quoted-text-item → Any Unicode scalar value except \
multiline-quoted-text-itemescaped-newline

interpolated-string-literal → " ­interpolated-text­ opt "
interpolated-string-literal → """­ multiline-interpolated-text ­opt­"""

­ interpolated-textinterpolated-text-item ­interpolated-text ­opt
interpolated-text-item\(expression) | quoted-text-item

multiline-interpolated-textmultiline-interpolated-text-item ­multiline-interpolated-text ­opt­
multiline-interpolated-text-item\expression­)­ | multiline-quoted-text-item

escaped-character\0\\­ | \t ­| \n | \r | \"\'
­ escaped-character\u ­{ ­unicode-scalar-digits­}
unicode-scalar-digits → Between one and eight hexadecimal digits

escaped-newline\ ­whitespace ­opt ­line-break



演算子


Swift の標準ライブラリは、その多くは使えるように数多くの演算子を定義しており、基本演算子 および 高度な演算子 で議論されています。本セクションでは、どの文字がカスタムの演算子を定義するために使用できるか説明します。


カスタム演算子は、/, =, -, +, !, *, %, <, >, &, |, ^, ?, または ~ 、の ASCII 文字の内の一つで始まるか、または以下の文法で定義されている Unicode 文字の一つで始まります(これは、とりわけ、算術演算子、その他の記号、および Dingbats Unicode ブロック、その他からの文字を含みます)。最初の文字の後には、Unicode を組み合わせた文字も許可されます。


また、ドット(.) で始まるカスタム演算子を定義することもできます。これらの演算子は、追加のドットを含めることができます。たとえば、.+ は単一の演算子として扱われます。演算子が、ドットで始まらない場合、他の場所にドットを含めることはできません。例えば、+.+ は、.+ 演算子が続く + 演算子として扱われます。


疑問符(?) を含むカスタム演算子は定義できますが、それらは疑問符の文字のみで構成はできません。また、演算子は感嘆符(!) を含むことができますが、後置演算子は、疑問符や感嘆符のいずれかで始めることはできません。


注意: =, ->, //, /*, */, ., のトークン、接頭辞演算子 <,&,?, 挿入辞演算子 ?, 接尾辞演算子の >,!,? は予約されています。これらのトークンは、オーバーロードできず、またそれらは、カスタム演算子として使用することはできません。


演算子の周りの空白は、演算子が接頭辞演算子、接尾辞演算子、または二項演算子として使用されるかどうかを決定するために使用されます。この動作は、以下の規則に要約されます。


これらの規則の目的のため、演算子の前の文字(、[、{、演算子の後の文字 )、]、 および }、また文字 ,, ;, および : は空白文字と見なされます。


上記の規則には注意点が 1 つあります。もし ! または ? の、事前に定義された演算子の左側に空白文字がなければ、それは右側に空白を持っているかどうかに関係なく、接尾辞演算子として扱われます。? を optional の連鎖の演算子として使うには、左に空白を持つことはできません。三項条件演算子 (? :) でそれを使用するには、周りの両側に空白を書かなければなりません。


特定の構築物において、< または > に続く演算子は、2つ以上のトークンに分割することができます。残りは、同様に扱われ、再び分割できます。その結果、Dictionary<String, Array<Int>> のような構築物で、閉じる > の文字の間に明確にするために空白を使用する必要はありません。この例では、閉じる > 文字は、ビットシフト >> 演算子として誤って解釈され、単一のトークンとして扱われる事はありません。


新しい、カスタム演算子を定義する方法を学ぶには、カスタム演算子演算子の宣言 を参照してください。既存の演算子をオーバーロードする方法を学ぶには、演算子メソッド を参照して下さい。


演算子の文法

operatoroperator-head ­operator-characters opt
operatordot-operator-head ­dot-operator-characters opt

operator-head/=-+!* ­| % | >&|^~ | ­?
­ operator-head → U+00A1–U+00A7
operator-head → U+00A9 or U+00AB
operator-head → U+00AC or U+00AE
operator-head → U+00B0–U+00B1, U+00B6, U+00BB, U+00BF, U+00D7, or U+00F7
operator-head → U+2016–U+2017 or U+2020–U+2027
operator-head → U+2030–U+203E
operator-head → U+2041–U+2053
operator-head → U+2055–U+205E
operator-head → U+2190–U+23FF
operator-head → U+2500–U+2775
operator-head → U+2794–U+2BFF
operator-head → U+2E00–U+2E7F
operator-head → U+3001–U+3003
operator-head → U+3008–U+3030

operator-characteroperator-head
operator-character → U+0300–U+036F
operator-character → U+1DC0–U+1DFF
operator-character → U+20D0–U+20FF
operator-character → U+FE00–U+FE0F
operator-character → U+FE20–U+FE2F
operator-character → U+E0100–U+E01EF
operator-charactersoperator-character ­operator-characters opt

dot-operator-head → .
­ dot-operator-character → .­ | operator-character
dot-operator-charactersdot-operator-character ­dot-operator-characters opt

binary-operatoroperator
prefix-operatoroperator
postfix-operatoroperator






前:言語リファレンスについて 次:型
目次
Xcode 9 の新機能

Swift:はじめに
Swift と Cocoa と Objective-C
Swift Blog より

  • ようこそ Swift へ(Part I)
  • Swift について
  • バージョン互換性
  • Swift のツアー
  • 単純な値
    制御フロー
    関数とクロージャ
    オブジェクトとクラス
    列挙型と構造体
    プロトコルと拡張機能
    エラー処理
    汎用(ジェネリック)
  • Swift 言語のガイド(Part II)
  • Swift の基本
  • 定数と変数
  • 定数と変数の宣言
    型注釈
    定数と変数の命名
    定数と変数の印刷
    コメント
    セミコロン
  • 整数
  • 整数の境界
    Int
    UInt
    浮動小数点数
    安全な型と型推論
    数値リテラル
  • 数値型変換
  • 整数変換
    整数と浮動小数点間の変換
    型エイリアス
    ブール型
    タプル
  • Optional
  • nil
    if 文と強制開封
    Optional の結合
    暗黙に開封された Optionals
    エラー処理
  • アサーション(断言)と前提条件
  • アサーションを使用したデバッグ
    前提条件の実施
  • 基本演算子
  • 専門用語
    代入演算子
  • 算術演算子
  • 剰余演算子
    単項マイナス演算子
    単項プラス演算子
    複合代入演算子
    比較演算子
    三項条件演算子
    Nil 合体演算子
  • 範囲演算子
  • 閉鎖範囲演算子
    半開放範囲演算子
    片方の範囲
  • 論理演算子
  • 論理 NOT 演算子
    論理 AND 演算子
    論理 OR 演算子
    論理演算子の組み合わせ
    明示的な括弧
  • 文字列と文字
  • 文字列リテラル
    複数行の文字列リテラル
    文字列リテラル内の特殊文字
    空の文字列の初期化
    文字列の可変性
    文字列は値の型
    文字を使った作業
    文字列と文字を連結
    文字列補間
  • ユニコード(Unicode)
  • Unicode スカラー
    文字列リテラルの中の特別の文字
    拡張書記クラスタ
    文字を数える
  • 文字列のアクセスと変更
  • 文字列のインデックス
    部分文字列
    挿入と削除
  • 文字列の比較
  • 文字列と文字の等価性
    接頭辞と接尾辞の等価性
  • 文字列の Unicode 表現
  • UTF-8 の表現
    UTF-16 表現
    Unicode のスカラー表現
  • コレクション型
  • コレクションの可変性
  • 配列
  • 配列型省略構文
    空の配列の作成
    デフォルト値を持つ配列の作成
    2つの配列を共にして一つの配列に
    配列リテラルでの配列の作成
    配列へのアクセスと変更
    配列の繰り返し処理
  • セット
  • セット型のハッシュ値
    セット型の構文
    空のセットの作成と初期化
    配列リテラルでセットの作成
    セットへのアクセスと変更
    セットを反復処理
  • セット操作の実行
  • 基本的なセットの操作
    セットの身分と等価性
  • Dictionary
  • Dictionary 型の省略型構文
    空の Dictionary を作成
    Dictionary リテラルで Dictionary の作成
    Dictionary のアクセスと変更
    Dictionary を繰り返し処理
  • フロー制御
  • For-In ループ
  • While ループ
  • While
    Repeat-While
  • 条件文
  • if 文
  • Switch
  • 暗黙の Fallthrough なし
    範囲の一致
    タプル(Tuples)
    値の結合
    Where
    複合した case
  • 制御転送文
  • Continue
  • Break
  • ループ文内の Break
    Switch 文内の Break
    Fallthrough
    ラベル付きの文
    早期終了
    API 利用可能性の確認
  • 関数
  • 関数の定義と呼び出し
  • 関数のパラメータと戻り値
  • パラメータなしの関数
    複数パラメータの関数
    戻り値なしの関数
    複数の戻り値を持つ関数
    optional のタプル型の戻り値
  • 関数引数のラベルとパラメータ名
  • 引数のラベルの指定
    引数ラベルの省略
    デフォルトのパラメータ値
    可変個引数のパラメータ
    In-Out パラメータ
  • 関数型
  • 関数型の使用
    パラメータ型としての関数型
    戻り値の型としての関数型
    入れ子になった関数
  • クロージャ
  • クロージャ式
  • ソートするメソッド
    クロージャ式の構文
    文脈から型を推論
    単一式クロージャからの暗黙的戻り値
    引数名の省略
    演算子メソッド
    後続クロージャ
    値のキャプチャ
    クロージャは参照型
    クロージャのエスケープ
    オートクロージャ
  • 列挙型
  • 列挙型の構文
    switch 文で列挙型の値の一致
    関連する値
  • 生の値
  • 暗黙に割り当てられた生の値
    生の値からの初期化
    再帰的な列挙型
  • クラスと構造体
  • クラスと構造体を比較
  • 定義の構文
    クラスと構造体のインスタンス
    プロパティにアクセス
    構造体型のためのメンバー化イニシャライザ
    構造体と列挙型は値型
  • クラスは参照型
  • ID 演算子
    ポインタ
    クラスと構造体の間の選択
    文字列、配列、辞書の代入とコピーの動作
  • プロパティ
  • 格納されたプロパティ
  • 定数構造体インスタンスの格納されたプロパティ
    遅延した格納されたプロパティ
    格納されたプロパティとインスタンス変数
  • 計算されたプロパティ
  • セッタ宣言の省略形
    読み取り専用の計算されたプロパティ
    プロパティ監視者
    グローバルとローカル変数
  • 型プロパティ
  • 型プロパティの構文
    型プロパティの照会と設定
  • メソッド
  • インスタンスメソッド
  • self プロパティ
    インスタンスメソッド内から値の型を変更
    変異メソッド内で self に代入
    型メソッド
  • サブスクリプト
  • サブスクリプトの構文
    サブスクリプトの使用法
    サブスクリプトのオプション
  • 継承
  • 基本クラスの定義
    サブクラス化
  • オーバーライド(上書き)
  • スーパークラスメソッド、プロパティ、サブスクリプトへのアクセス
    オーバーライドするメソッド
  • オーバーライドするプロパティ
  • プロパティのゲッタとセッタのオーバーライド
    プロパティ監視者のオーバーライド
    オーバーライドの防止
  • 初期化
  • 格納されたプロパティの初期値を設定
  • イニシャライザ
    デフォルトのプロパティ値
  • 初期化のカスタマイズ
  • 初期化パラメータ
    パラメータ名と引数ラベル
    引数ラベルのないイニシャライザのパラメータ
    Optional のプロパティ型
    初期化中に定数プロパティへの代入
  • デフォルトのイニシャライザ
  • 構造体型のためのメンバ化イニシャライザ
    値型のイニシャライザデリゲート
  • クラスの継承と初期化
  • 指定イニシャライザとコンビニエンスイニシャライザ
    指定とコンビニエンスイニシャライザの構文
    クラス型のイニシャライザデリゲート
    二相の初期化
    イニシャライザ継承とオーバーライド
    自動イニシャライザの継承
    実際の指定とコンビニエンスイニシャライザ
  • 失敗可能イニシャライザ
  • 生の値を持つ列挙型のための失敗可能イニシャライザ
    初期化失敗の伝播
    失敗可能イニシャライザのオーバーライド
    init! の失敗可能イニシャライザ
    必須イニシャライザ
    クロージャや関数でのデフォルトのプロパティ値設定
  • デイニシャライザ
  • デイニシャライザはどのように働くか
    作動中のデイニシャライザ
  • Optional の連鎖
  • 強制開封の代替としての Optional の連鎖
    Optional の連鎖のモデルクラスの定義
    Optional の連鎖を使用したプロパティへのアクセス
    Optional の連鎖を通じてメソッドを呼び出す
  • Optional の連鎖を通じてサブスクリプトへのアクセス
  • Optional 型のサブスクリプトにアクセス
    連鎖の複数レベルのリンク
    optional の戻り値を持つメソッドでの連鎖
  • エラー処理
  • エラーの表現と Throw
    エラーの処理
    throw 関数を使用したエラーの伝播
    Do-Catch を使用したエラー処理
    エラー をOptional の値に変換
    エラー伝播を無効に
    クリーンアップアクションの指定
  • 型キャスト
  • 型キャストのためのクラス階層の定義
    型のチェック
    ダウンキャスト
  • Any と AnyObjecgt 用の型キャスティング
  • ネストした型
  • 実際のネストした型
    ネストした型への参照
  • 拡張機能
  • 拡張機能の構文
    計算されたプロパティ
    イニシャライザ
  • メソッド
  • 変異インスタンスメソッド
    サブスクリプト
    ネストした型
  • プロトコル
  • プロトコルの構文
    プロパティの要件
    メソッドの要件
    変異メソッドの要件
  • イニシャライザの要件
  • プロトコルイニシャライザ要件のクラス実装
    失敗可能イニシャライザの要件
    型としてのプロトコル
    デリゲート
  • 拡張機能を持つプロトコル準拠の追加
  • 拡張機能を持つプロトコルの採用を宣言
    プロトコル型のコレクション
    プロトコルの継承
    クラス専用プロトコル
    プロトコルの構成
    プロトコル準拠の確認
    Optional のプロトコル要件
  • プロトコル拡張機能
  • デフォルトの実装の提供
    プロトコル拡張機能に制約を追加
  • ジェネリック(汎用)
  • 汎用が解決する問題
    汎用関数
    型パラメータ
    型パラメータの命名
    汎用の型
    汎用型の拡張
  • 型の制約
  • 型制約の構文
    実際の型の制約
  • 関連型
  • 実際の関連型
    既存の型を拡張して関連型を指定
    型注釈を使用して関連型を制約
    汎用の Where 句
    汎用の Where 句を含む拡張機能
    関連する型と汎用の Where 句
    汎用のサブスクリプト
  • 自動参照カウント
  • どのように ARC は働くか
    実際の ARC
    クラスインスタンス間の強い循環参照
  • クラスインスタンス間の強い循環参照の解決
  • 弱い参照
    所有されていない参照
    所有されていない参照と暗黙に開封された Optional のプロパティ
    クロージャの strong な循環参照
  • クロージャの strong な循環参照の解決
  • キャプチャリストの定義
    弱い参照と所有されていない参照
  • メモリの安全性
  • メモリへのアクセス競合の理解
    メモリアクセスの特徴
    In-Out パラメータへのアクセスの競合
    メソッド内の Self へのアクセスの競合
    プロパティへのアクセスの競合
  • アクセス制御
  • モジュールとソースファイル
  • アクセスレベル
  • アクセスレベルの全体的指針
    デフォルトのアクセスレベル
    ターゲット一つのアプリのアクセスレベル
    フレームワークのアクセスレベル
    ユニットテストのターゲット用のアクセスレベル
    アクセス制御の構文
  • カスタム型
  • タプル型
    関数型
  • 列挙型
  • 生の値と関連する値
    ネストした型
    サブクラス化
  • 定数、変数、プロパティ、およびサブスクリプト
  • ゲッタとセッタ
  • イニシャライザ
  • デフォルトのイニシャライザ
    構造体型用のデフォルトメンバ化イニシャライザ
  • プロトコル
  • プロトコルの継承
    プロトコルの準拠
  • 拡張機能
  • 拡張機能の private メンバ
    汎用
    型エイリアス
  • 高度な演算子
  • ビット単位演算子
  • ビット単位の NOT 演算子
    ビット単位の AND 演算子
    ビット単位の OR 演算子
    ビット単位の XOR 演算子
  • ビット単位の左と右シフト演算子
  • 符号なし整数のシフト動作
    符号付き整数のシフト動作
  • オーバーフロー演算子
  • 値オーバーフロー
    優先順位と結合性
  • 演算子メソッド
  • 接頭辞と接尾辞演算子
    複合代入演算子
    等価演算子
  • カスタム演算子
  • カスタム挿入辞演算子の優先順位
  • 言語のガイド(Part III)
  • 言語リファレンスについて
  • 文法の読み方
  • 語彙の構造
  • 空白とコメント
    識別子
    キーワードと句読点
  • リテラル
  • 整数リテラル
    浮動小数点リテラル
    文字列のリテラル
    演算子

  • 型注釈
    型識別子
    タプル型
    関数型
    エスケープしないクロージャの制限事項
    配列型
    辞書型
    Optional の型
    暗黙に開封された Optional の型
    プロトコル構成の型
    メタタイプ型
    型の継承句
    型の推測

  • 接頭辞式
    Try 演算子
  • 二項式
  • 代入演算子
    三項条件演算子
    型キャスト演算子
  • 一次式
  • リテラル式
    Self 式
    スーパークラス式
  • クロージャ式
  • キャプチャ・リスト
    暗黙のメンバ式
    括弧で囲まれた式
    タプル式
    ワイルドカード式
    キーパス式
    セレクタ式
    キーパス文字列式
  • 接尾辞の式
  • 関数呼び出し式
    イニシャライザ式
    明示的なメンバ式
    接尾辞の Self 式
    サブスクリプト 式
    強制値の式
    Optional の連鎖式

  • ループ文
  • For-In 文
    While 文
    Repeat-While 文
  • 分岐文
  • if 文
    Guard 文
  • switch 文
  • switch 文は、網羅的である必要あり
    実行が暗黙的に case を Fall Through しない
    ラベル付き文
  • 制御転送文
  • break 文
    continue 文
    fallthrough 文
    return 文
    throw 文
    defer 文
    do 文
  • コンパイラ制御文
  • 条件コンパイルブロック
    行制御文
    利用可能条件
  • 宣言
  • トップレベルのコード
    コードブロック
    Import 宣言
    ­定数の宣言
  • 変数の宣言
  • 格納された変数と格納された変数のプロパティ
    計算された変数と計算されたプロパティ
    格納された変数監視者とプロパティの監視者
    型変数プロパティ
    型エイリアス宣言
  • 関数の宣言
  • パラメータ名
    In-Out パラメータ
    パラメータの特殊な種類
    メソッドの特殊な種類
    Throw する関数とメソッド
    Rethrow する関数とメソッド
    決して返さない関数
  • 列挙型の宣言
  • 任意の型の case を列挙
  • 間接による列挙
    生の値型の case を列挙
    列挙型 case へのアクセス
    構造体の宣言
    クラスの宣言
  • プロトコルの宣言
  • プロトコル・プロパティ宣言
    プロトコル・メソッド宣言
    プロトコル・イニシャライザ宣言
    プロトコル・サブスクリプト宣言
    プロトコルに関連した型の宣言
  • イニシャライザ宣言
  • 失敗可能イニシャライザ
    デイニシャライザ宣言
    拡張機能の宣言
    サブスクリプト宣言
    演算子の宣言
    優先順位グループ宣言
  • 宣言修飾子
  • アクセス制御レベル
  • 属性
  • 宣言の属性
  • インターフェイスビルダーで使われる宣言属性
    型の属性
  • パターン
  • ワイルドカードパターン
    識別子パターン
    値結合パターン
    タプルパターン
    列挙型 case パターン
    Optional のパターン
    型キャストパターン
    式のパターン
  • 汎用パラメータと引数
  • 汎用パラメータ句
  • 汎用の where 句
    汎用引数句
  • 文法のまとめ
  • 語彙の構造



    宣言
    属性
    パターン
    汎用パラメータと引数
  • マニュアルの変更履歴
  • 変更履歴