Swift には、三種類の文があります:単純な文、コンパイラ制御文、そしてフロー制御文です。単純な文は、最も一般的で、式または宣言のどちらかで構成されています。コンパイラ制御文は、プログラムに、コンパイラの動作の外観を変更することを可能とし、条件付きコンパイルブロックと行制御文が含まれます。


フロー制御文は、プログラム内での実行の流れを制御するために使用されます。Swift には、フロー制御文に数種類があり、ループ文、分岐文、および制御転送文を含みます。ループ文は、コードブロックを繰り返し実行することを可能にし、分岐文は、決まった条件が満たされた場合のみ、決まったコードのブロックを実行することを可能にし、制御転送文は、コードが実行される順序を変更する方法を提供します。また、Swift はスコープを導入する do 文を提供し、エラーをキャッチして処理し、現在のスコープがちょうど終了する前にクリーンアップ操作を実行するための defer 文を提供します。


セミコロン (;) は、任意の文の後に書くことができ、同じ行に書いた場合には、複数の文を分離するために使用されます。



文の文法

statementexpression ­; ­opt
statementdeclaration ­; ­opt
statementloop-statement ­; ­opt
­ statementbranch-statement ­; ­opt
statementlabeled-statement ­; ­opt
statementcontrol-transfer-statement ­; ­opt
statementdefer-statement ­; ­opt
statementdo-statement­ ­: ­opt
statementcompiler-control-statement
­ statementsstatement ­statements opt



ループ文


ループ文は、ループ内で指定された条件に応じて、コードのブロックが、繰り返し実行されることを可能にします。Swift には3つのループ文があります:for-in 文、while 文、および repeat-while 文です。


ループ文のフロー制御は、break 文と continue 文によって変更でき、以下の break 文 と、continue 文 で議論します。


ループ文の文法

loop-statementfor-in-statement
loop-statementwhile-statement
loop-statementrepeat-while-statement



For-In 文


for-in 文は、コードのブロックが Sequence プロトコルに準拠する、コレクション (または any type(任意の型)) の各項目に対して一度だけ実行できます。


for-in 文は以下の形式をとります。


for in {

       

}

makeIterator() メソッドは、繰り返す型、つまり IteratorProtocol プロトコルに準拠する型の値を取得する コレクション 式に呼び出されます。プログラムは、繰り返しの next() メソッドを呼び出すことにより、ループの実行を開始します。返される値が nil でない場合、それは 項目 パターンに代入され、プログラムは を実行し、ループの先頭で実行を継続します。そうでない場合、プログラムは代入を実行せず、 を実行せず、for-in 文の実行を終了します。



for-in 文の文法

for-in-statementfor case opt pattern ­in ­expression where-clause opt ­code-block



while 文


while 文は、条件が true のままである限り、コードのブロックを繰り返し実行できます。


while 文の形式は以下のとおりです。


while {

       

}



while 文は次のように実行されます。


  1. 条件 が評価されます。
    もし true なら、実行はステップ2に続き、false なら、プログラムは while 文の実行を終了します。
  2. プログラムは、 を実行し、実行は、ステップ1に戻ります。

が実行される前に 条件 の値が評価されるので、while 文の中の は、ゼロ回以上実行されます。


条件 の値は、Boole 型か、Bool にブリッジされた型でなければなりません。Optional の結合 で説明したように、条件も optional の結合の宣言であることができます。


while 文の文法

while-statementwhile condition-list code-block

condition-listcondition | condition ­, ­condition-list
conditionexpression­ | availability-condition ­| case-condition | optional-binding-condition­

case-conditioncase pattern ­initializer­
optional-binding-conditionlet ­pattern­ initializer | var pattern initializer­



Repeat-While 文


repeat-while 文は、条件が true のままであるかぎり、コードのブロックを、1回以上実行します。


repeat-while 文の形式は以下のとおりです。


repeat-while 文は、以下のように実行されます:


  1. プログラムは を実行し、実行は、ステップ2に続きます。
  2. 条件 が評価されます。
    もし true なら、実行はステップ1に戻ります。false の場合は、プログラムは repeat-while 文の実行を終了します。

が実行された後、条件 の値が評価されるので、repeat-while 文の は、少なくとも一度実行されます。


条件 の値は Bool 型かもしくは Bool にブリッジした型でなければなりません。Optional の結合 で議論したように、条件も optional の結合の宣言であることができます。


repeat-while 文の文法

repeat-while-statementrepeat code-block ­while expression­



分岐文


分岐文は、プログラムが、1つ以上の条件の値に応じてコードの特定の部分を実行することを可能にします。分岐文で指定された条件の値は、プログラム分岐と、それゆえ、コードのどのブロックが実行されるかを制御します。Swift には、3つの分岐文があります:if 文、guard 文、そして switch 文です。


if 文あるいは switch 文のフロー制御は、break 文によって変更でき、以下の break 文 で説明されています。


分岐文の文法

branch-statementif-statement
branch-statementguard-statement
­ branch-statementswitch-statement



if 文


if 文は、1つ以上の条件の評価に基づいてコードを実行するために使用されます。


if 文には2つの基本的な形式があります。各形式には、開き括弧と閉じ括弧が必要です。


最初の形式では、条件が true である場合にのみ、コードが実行され、以下の形式です:


if {

       

}


if 文の2番目の形式は、(else キーワードで導入された) 追加の else 句 を提供し、条件が true の場合、コードの一部を実行するのに使用され、同じ条件が false の場合、コードの別の部分を実行するために使用されます。一つの else 句が存在している場合、if 文は以下の形式です:


if {

       

} else {

       

}


if 文の else 句は、1つ以上の条件をテストするために、別の if 文を含めることができます。一緒に連鎖している if 文は以下の形式のようになります。


if {

       

} else if {

       

} else {

       

}


if 文の全ての条件の値は Bool 型かあるいは Bool にブリッジした型でなければなりません。Optional の結合 で議論したように、条件も、optional の結合の宣言であることができます。


if 文の文法

if-statementif condition-list ­code-block else-clause opt
else-clauseelse­ code-blockelse ­if-statement



Guard 文


guard 文は、1つ以上の条件が満たされない場合、ある範囲からプログラムの制御を転送するために使用されます。


guard 文の形式は以下のとおりです。


guard else {

       

}


guard 文の全ての条件値は、Bool 型であるか、Bool にブリッジした型でなければなりません。Optional の結合 で議論したように、条件も、optional の結合の宣言をすることができます。


guard 文の条件内の optional の結合の宣言から値を割り当てられた定数または変数は範囲を取り囲む残りの guard 文に使用できます。


guard 文の else 句は必須であり、以下の文のいずれか一つを使用して、Never の戻り値の型を持つ関数を呼び出すか、または guard 文を取り囲む範囲の外へとプログラム制御を転送しなければなりません。


制御転送文については、以下の 制御転送文 で説明します。Never の戻り値の型を持つ関数の詳細については、Never を返す関数 を参照してください。


guard 文の文法

guard-statementguard ­condition-list else ­code-block

­


switch 文


switch 文では、制御式の値に応じてコードの特定のブロックを実行することができます。


switch 文の形式は次のとおりです。


switch {

case :

       

case where :

       

case where ,

where :

       

default :

       

}


switch 文の 制御式 は、評価され、それぞれの case に指定されたパターンと比較されます。一致する物が見つかった場合、プログラムはその case の範囲内にリストされている を実行します。各 case の範囲は、空にすることはできません。その結果、各 case ラベルのコロン(:)以下に少なくとも一つの文を含めなければなりません。一致した case の本体内の全てのコードを実行しない場合には、一つの break 文を使用してください。


コードがその上で分岐できる式の値は、非常に柔軟です。例えば、整数や文字などのスカラー型の値に加えて、コードは、浮動小数点数、文字列、タプル、カスタムクラスのインスタンス、および optional を含む全ての型の値の上で分岐できます。制御式 の値が列挙型における case の値にも一致し、値の指定した範囲に含まれていてもチェックすることができます。switch 文の値のこれらの様々な型を使用する方法の例については、フロー制御 の章の Switch を参照してください。


switch の case は、必要に応じて各パターンの後に where 句を含めることができます。where 句 は式が続く where キーワードによって導入され、そして case 内のパターンが、制御式 に一致したと見なされる前に、追加の条件を提供するために使用されます。where 句が存在する場合、制御式 の値が case のパターンの1つと一致し、where 句の式が true と評価された場合にのみ、該当する case 内の文が実行されます。たとえば、(1、1) のように、同じ値の2つの要素を含むタプルである場合にのみ、以下の例の case は 制御式 と一致します。


case let (x, y) where x == y:



上記の例が示すように、case 内のパターンはまた、let キーワードを使用して定数を結合できます(それらはまた、var キーワードを使用して変数を結合できます)。するとこれらの定数(または変数) は、対応する where 句で参照でき、case の範囲内のコードの残りの全ての部分を通じて参照できます。case が制御式に一致する、複数のパターンを含んでいる場合、すべてのパターンには同じ定数または変数結合が含まれていなければなりませんし、また、結合された各々の変数または定数はすべての case のパターンすべてで同じ型でなければなりません。


switch 文も、default キーワードで導入されるデフォルトの case を含めることができます。デフォルトの case 内のコードは、他の case が制御式に一致しない場合にのみ実行されます。switch 文は、デフォルトの case を一つだけ、switch 文の最後に表示する事ができます。


パターン·マッチ操作の実際の実行順序、および case のパターンの特定の評価順序は特に規定されていませんが、評価はソースの順序で実行されているかのように、switch 文のパターンマッチは、動作し、すなわち、ソースコードで現れる順序で動作します。結果として、複数の case が同じ値に評価されるパターンを含んでいる場合、そうすると制御式の値に一致できるため、プログラムは、ソースの順序で最初に一致した case 内のコードのみを実行します。



switch 文は、網羅的である必要あり


Swift では、制御式の型のすべての可能な値が、case の少なくとも1つのパターンの値と一致しなければなりません。これは単に実行可能でない場合には(例えば、制御式の型が Int であるとき)、要件を満たすデフォルトの case を含めることができます。



実行が暗黙的に case を Fall Through しない


一致する case 内のコードが実行を終了した後、プログラムは switch 文から抜けます。プログラムの実行は継続せず、次の case、またはデフォルトの case に "fall through" しません。すなわち、一つの case から次へ実行を続けたい場合、明示的に fallthrough 文を含めると、それは単に fallthrough キーワードで構成されており、そこから実行を継続したい case に書きます。fallthrough 文の詳細は、下記の fallthrough 文 を参照してください。


switch 文の文法

switch-statementswitch ­expression ­{­switch-cases ­opt ­}
­ switch-casesswitch-case switch-cases ­opt
switch-casecase-label ­statementsdefault-label statements

case-labelcase ­case-item-list ­:
case-item-listpattern ­where-clause ­optpattern ­where-clause ­opt ­, case-item-list
­ default-labeldefault ­:

where-clausewhere ­where-expression
where-expressionexpression



ラベル付き文


ループ文、if 文、switch 文、または do 文に、コロン(:) の直前にラベルの名前で構成された 文ラベル を接頭辞で付けることができます。breakcontinue 文の文ラベルを使用して、ループ文または switch 文のフロー制御を変更したい事について明示でき、この事は以下の break 文 と、continue 文 で議論しました。


ラベル付き文の範囲は、文ラベル以下の文の全体です。ラベル付き文を入れ子にすることができますが、それぞれの文ラベルの名前はただ一つである必要があります。


詳細および、文のラベルを使用する例については、フロー制御 の章の ラベル付きの文 を参照してください。



ラベル付き文の文法

labeled-statementstatement-label ­loop-statement
labeled-statementstatement-label ­if-statement
labeled-statementstatement-label ­switch-statement
labeled-statementstatement-label ­do-statement­

statement-labellabel-name ­:
label-nameidentifier­



制御転送文


制御転送文は、プログラム内のコードを無条件に、一つのコードから別のコードへとプログラムの制御を転送することによって、実行される順序を変更できます。Swift には、5つの制御転送文があります。break 文、continue 文、fallthrough 文、return 文、及び throw 文です。



制御転送文の文法

control-transfer-statementbreak-statement
control-transfer-statementcontinue-statement
control-transfer-statementfallthrough-statement
control-transfer-statementreturn-statement
control-transfer-statementthrow-statement



Break 文


break 文は、if 文または switch 文のループのプログラムの実行を終了します。break 文は、break キーワードのみで構成できますが、または以下に示すように、文ラベルの名が続く break キーワードで構成されます。


break

break



break 文は、文ラベルの名前が続く場合、そのラベルの名前で指定されたループ、if 文や switch 文のプログラムの実行を終了します。


break 文に、文ラベル名が続かない場合には、switch 文またはそれが発生した、最も内側のループ文のプログラムの実行を終了します。if 文から抜け出すためには、ラベルなしの break 文は使用できません。


どちらの場合も、プログラム制御は、その後内側のループまたはもしあれば、 switch 文の次のコードの最初の行に転送されます。


break 文を使用する方法の例については、フロー制御 の章の Break および ラベル付きの文 を参照してください。


break 文の文法

break-statementbreak ­label-name ­opt



continue 文


continue 文は、ループ文の現在のプログラムの反復する実行を終了しますが、ループ文の実行は停止しません。continue 文は、continue キーワードのみで構成できますが、以下に示すように、文ラベル名が続く continue キーワードで構成できます。



continue

continue



continue 文に、文ラベルの名前が続く場合は、そのラベルで名付けられたループ文の現在の反復のプログラムの実行を終了します。


continue 文に、文ラベルの名が続かない場合は、それが発生した最も内側のループ文を囲む現在の反復のプログラムの実行を終了します。


どちらの場合も、プログラム制御はその後、ループ文を囲む条件に転送されます。


for 文では、ループの本体の実行後に増分 (インクリメント) 式が評価されるため、continue 文が実行された後に増分 (インクリメント) 式が評価されます。


continue 文を使用する方法の例については、フロー制御 の章の Continue 文 と、ラベル付きの文 を参照してください。


continue 文の文法

continue-statementcontinue ­label-name opt



fallthrough 文


fallthrough 文は、fallthrough キーワードで構成され、switch 文の case ブロックでのみ発生します。fallthrough 文は、プログラムの実行を switch 文の一つの case から次の case へと続行します。プログラムの実行は、switch 文の制御式の値と case のラベルのパターンが一致しない場合でも、次の case に進みます。


fallthrough 文は、case のブロックの最後の文としてではなく、switch 文の中のどの場所にでも書くことができますが、最後の case のブロックでは使用できません。また、そのパターンが値の結合パターンを含んでいる場合にも、case のブロックに制御を転送することはできません。


switch 文に fallthrough 文を使用する方法の例については、 フロー制御 の章の 制御転送文 を参照してください。



fallthrough 文の文法

fallthrough-statementfallthrough



return 文


return 文は、関数またはメソッド定義の本体で発生し、呼び出し元の関数やメソッドに、プログラム実行を戻します。プログラムの実行は、関数やメソッドの呼び出しの直後の点に続きます。


return 文は、return キーワードのみで構成されるか、または以下に示すように、式が続く return キーワードで構成されます。


return

return



return 文に式が続く場合、式の値は、呼び出し元の関数やメソッドに返されます。式の値が、関数やメソッドの宣言で宣言された戻り値の型の値と一致しない場合は、呼び出し元の関数やメソッドに返される前に、式の値は、戻り値の型に変換されます。



注意: 失敗可能イニシャライザ で説明したように、return 文の特殊な形式 (return nil) は、失敗可能なイニシャライザの初期化の失敗を示すために使用できます。


return 文に、式が続かない場合は、値を返さない関数やメソッドから戻るためにのみ使用できます (すなわち、関数やメソッドの戻り値の型が Void または () の場合)。


return 文の文法

return-statementreturn ­expression opt



throw 文


throw 文は、throw する関数またはメソッドの本体、または throws キーワードでマークされた型のクロージャ式の本体で発生します。


throw 文を使用すると、プログラムは現在の範囲の実行を終了し、エラーの伝播を始めてそれが囲む範囲に広めます。throw されたエラーは、do 文 のcatch 句で処理されるまで伝播を続けます。


throw 文は、以下に示すように、throw キーワードとそれに続く式で構成されます。


throw



式 (expression) の値は、Error プロトコルに準拠した型でなければなりません。


throw 文の使用例については、エラー処理 の章の throw 関数を使用したエラーの伝播 を参照してください。


throw 文の文法

throw-statementthrow­ expression



defer 文


defer 文は、プログラムの制御を defer 文が現れる範囲の外に転送する直前にコードの実行を移すために使用されます。


defer 文の形式は以下のとおりです。


defer {

       

}



defer 文内の文は、プログラム制御の転送方法に関係なく実行されます。例えば、ファイル記述子を閉じたり、エラーが throw された場合でも実行する必要があるアクションを実行したりなどの手動リソース管理を実行する場合などに、defer 文を使用できる事を意味します。


複数の defer 文が同じ範囲内にある場合、それらの表示順序は実行される順序と逆です。与えられた範囲内で最後の defer 文を実行すると、その最後の defer 文内の文は、他の defer 文によってクリーンアップされるだろうリソースを参照できます。


  1. func f() {
  2.         defer { print("First") }
  3.         defer { print("Second") }
  4.         defer { print("Third") }
  5. }
  6. f()
  7. // Prints "Third"
  8. // Prints "Second"
  9. // Prints "First"


defer 文内の文は、defer 文の外のプログラム制御を転送することはできません。


defer 文の文法

defer-statementdefer ­­code-block



do 文


do 文は新しい範囲を導入するために使用され、定義されたエラー条件と一致するパターンを含む 1 つ以上の catch 句をオプションで含むことができます。do 文の範囲で宣言された変数と定数には、その範囲内でのみアクセスできます。


Swift の do 文は、コードブロックを区切るために使用される C の中括弧({}) に似ており、実行時にパフォーマンスコストが発生することはありません。


do 文の形式は以下のとおりです。


do {

        try

       

} catch {

       

} catch where {

       

}

switch 文のように、コンパイラは、catch 句が網羅的かどうかを推測しようとします。このような判断が下された場合、そのエラーは処理されたものとみなされます。それ以外の場合、エラーは包含する範囲の外へと伝播する可能性があります。つまり、エラーは、それを囲む catch 句で処理されなければならないか、またはそれを含む関数は、throws で宣言されなければなりません。


エラーが確実に処理されるようにするには、ワイルドカードパターン(_) のような、すべてのエラーに一致するパターンを持つ catch 句を使用して下さい。catch 句がパターンを指定していない場合、catch 句はすべてのエラーと一致し、error という名のローカル定数に結合されます。catch 句で使用できるパターンの詳細については、パターン を参照してください。


do 文といくつかの catch 句を使用する方法の例については、エラーの処理 を参照してください。


do 文の文法

do-statementdo ­code-block ­catch-clauses ­opt
catch-clausescatch-clause ­catch-clauses ­opt
catch-clausecatch pattern ­opt where-clause­ opt­ code-block



コンパイラ制御文


コンパイラ制御文によって、プログラムはコンパイラの動作を変更できます。Swift には、条件コンパイルブロックと行制御文の2つのコンパイラ制御文があります。


コンパイラ制御文の文法

compiler-control-statementconditional-compilation-block
compiler-control-statementline-control-statement



条件コンパイルブロック


条件コンパイルブロックは、1つ以上のコンパイル条件の値に応じて、条件付きでコードをコンパイルする事を可能にします。


すべての条件コンパイルブロックは、#if コンパイル指令で始まり #endif コンパイル指令で終わります。単純な条件コンパイルブロックは、以下の形式をとります。


#if



#endif


if 文の条件とは異なり、コンパイル条件 はコンパイル時に評価されます。結果として、コンパイル条件 が コンパイル時に true と評価された場合にのみ、 はコンパイルされて実行されます。


コンパイル条件 には、true および false のブール値リテラル、-D コマンドラインフラグで使用される識別子、または以下の表にリストされているプラットフォーム条件のいずれかを含めることができます。


プラットフォーム条件有効な引数
os()macOS, iOS, watchOS, tvOS, Linux
arch()i386, x86_64, arm, arm64
swift()>= バージョン番号が続く


swift() プラットフォームのバージョン番号条件は、メジャー番号と、オプションのマイナー番号、オプションサービスのパッチ番号などと、バージョン番号の各部分を区切るドット(.) で構成されています。>= とバージョン番号の間には空白を入れてはいけません。


注意: arch(arm) プラットフォーム条件は ARM64 デバイスでは、true を返しません。32 ビットの iOS シミュレータ用にコードをコンパイルすると、arch(i386) プラットフォーム条件は true を返します。


論理演算子 &&、||、 および ! を使用してコンパイル条件を組み合わせることができ、グループ化には括弧を使用できます。


if 文と同様に、複数の条件分岐を追加して、異なるコンパイル条件をテストできます。#elseif 句を使用して、任意の数の追加分岐を追加できます。また、#else 句を使用して最後の追加分岐を追加することもできます。複数の分岐を含む条件コンパイルブロックの形式は以下のとおりです。


#if



#elseif



#else



#endif


注意: 条件コンパイルブロックの本体の各文は、コンパイルされていなくても解析されます。ただし、コンパイル条件に swift() プラットフォーム条件が含まれている場合は例外です。Swift のコンパイラのバージョンがプラットフォーム条件に指定されているものと一致する場合のみ、文が解析されます。この例外は、古いコンパイラが Swift の新しいバージョンで導入された構文を解析しようとしないことを保証します。


条件コンパイルブロックの文法

conditional-compilation-blockif-directive-clause ­elseif-directive-clauses ­opt else-directive-clause opt ­endif-directive

if-directive-clauseif-directive ­compilation-condition statements ­ opt
elseif-directive-clauseselseif-directive-clause ­elseif-directive-clauses opt­
elseif-directive-clauseelseif-directive­ ­compilation-condition­ statements ­opt­
else-directive-clauseelse-directive statements ­opt
if-directive#if
elseif-directive#elseif
else-directive#else
endif-directive#endif

compilation-conditionplatform-condition
compilation-conditionidentifier
compilation-conditionboolean-literal
compilation-condition( ­compilation-condition )
compilation-condition! ­­compilation-condition
compilation-condition­compilation-condition ­&& ­­compilation-condition
compilation-condition­compilation-condition ­|| ­compilation-condition

platform-conditionos ­( ­operating-system ­)
platform-conditionarch ­( ­architecture ­)
platform-conditionswift ­( ­>= ­swift-version )
operating-systemmacOS | iOS | watchOS | tvOS
architecturei386 | x86_64 | arm | arm64
swift-versiondecimal-digits swift-version-continuation ­opt
swift-version-continuation → . ­decimal-digits­ swift-version-continuation ­opt



­

行制御文


行制御文は、コンパイルされているソースコードの行番号とファイル名とは異なる行番号とファイル名を指定するために使用されます。行制御文を使用して、診断とデバッグの目的で Swift が使用するソースコードの位置を変更します。


行制御文には、次の形式があります。


#sourceLocation(file: , line: )

#sourceLocation()


行制御文の最初の形式は、行制御文に続くコード行で始まる #line および #file のリテラル式の値を変更します。行番号#line の値を変更し、ゼロより大きい任意の整数リテラルです。ファイル名#file の値を変更し、文字列リテラルです。


行制御文の2番目の形式、#sourceLocation() は、ソースコードの位置をデフォルトの行番号とファイル名にリセットします。


行制御文の文法

line-control-statement#sourceLocation ­( ­file: ­file-name ­, ­line: ­line-number ­)
line-control-statement#sourceLocation ­( ­)
line-numberA decimal integer greater than zero
file-namestatic-string-literal­



利用可能条件


利用可能条件 は、指定されたプラットフォーム引数に基づいて、実行時に API の利用可能性を照会する if、while、 および guard 文の条件として使用されます。


利用可能条件の形式は以下のとおりです。


if #available( , , *) {

       

} else {

       

}


利用可能件を使用して、使用したい API が実行時に使用可能かどうかに応じて、コードブロックを実行できます。コンパイラは、そのコード・ブロック内の API が使用可能であることを確認する時に、利用可能条件の情報を使用します。


利用可能条件には、プラットフォーム名とバージョンのコンマ区切りのリストが使用されます。iOS、macOS、watchOS、 および tvOS をプラットフォーム名に使用し、対応するバージョン番号を含めます。* 引数は必須で、他の全てのプラットフォームでは、利用可能条件によって保護されたコードブロックの本体が、ターゲットによって指定された最小のデプロイメント・ターゲットで実行されることを指定します。


ブール条件とは異なり、&&|| などの論理演算子を使用して利用可能条件を結合することはできません。


利用可能条件の文法

availability-condition#available ­( ­availability-arguments )
availability-argumentsavailability-argument | availability-argument , ­­availability-arguments
availability-argumentplatform-name platform-version­
availability-argument*
­ platform-nameiOS | iOSApplicationExtension
platform-namemacOS | macOSApplicationExtension
platform-namewatchOS
platform-nametvOS
platform-versiondecimal-digits
platform-versiondecimal-digits ­. ­decimal-digits
platform-versiondecimal-digits ­. decimal-digits ­. decimal-digits






前:式 次:宣言
目次
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 句
    汎用引数句
  • 文法のまとめ
  • 語彙の構造



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












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)












    トップへ(Swift Language Basics)