Statements¶ 文¶
In Swift, there are three kinds of statements: simple statements, compiler control statements, and control flow statements. Simple statements are the most common and consist of either an expression or a declaration. Compiler control statements allow the program to change aspects of the compiler’s behavior and include a conditional compilation block and a line control statement. スウィフトには、3種類の文があります:単純な文、コンパイラ制御文、そして制御の流れ文。単純な文は、もっとも普通のもので、ひとつの式もしくはひとつの宣言から成ります。コンパイラ制御文は、プログラムにコンパイラの挙動のいろいろな面を変更できるようにします、そして条件コンパイルブロックと行制御文を含みます。
Control flow statements are used to control the flow of execution in a program. There are several types of control flow statements in Swift, including loop statements, branch statements, and control transfer statements. Loop statements allow a block of code to be executed repeatedly, branch statements allow a certain block of code to be executed only when certain conditions are met, and control transfer statements provide a way to alter the order in which code is executed. In addition, Swift provides a do
statement to introduce scope, and catch and handle errors, and a defer
statement for running cleanup actions just before the current scope exits.
制御の流れ文は、プログラムにおいて実行の流れを制御するために使われます。いくつかの種類の制御の流れ文が、スウィフトにあります、それはループ文、分岐文、そして制御移動文を含みます。ループ文はコードの1ブロックが繰り返して実行されるようにします、分岐文はコードの特定のブロックを特定の条件が満たされるときにだけ実行されるようにします、そして制御移動文はコードが実行される順番を変える方法を提供します。加えて、スウィフトは、do
文をスコープを導入し、それでエラーを捕えて処理するために、そしてdefer
文を現在のスコープを脱出する直前にさまざまな片付け活動を実行するために提供します。
A semicolon (;
) can optionally appear after any statement and is used to separate multiple statements if they appear on the same line.
セミコロン(;
)はあらゆる文の後に任意に現れることができて、複数の文をそれらが同じ行に現れる場合に別々に分けるために使われます。
Grammar of a statement 文の文法
statement → expression ;
opt
statement → declaration ;
opt
statement → loop-statement ;
opt
statement → branch-statement ;
opt
statement → labeled-statement ;
opt
statement → control-transfer-statement ;
opt
statement → defer-statement ;
opt
statement → do-statement ;
opt
statement → compiler-control-statement
statements → statement statements opt
Loop Statements¶ ループ文¶
Loop statements allow a block of code to be executed repeatedly, depending on the conditions specified in the loop. Swift has three loop statements: a for
-in
statement, a while
statement, and a repeat
-while
statement.
ループ文は、ループにおいて指定される条件に従って、コードの1ブロックを繰り返して実行するようにします。スウィフトは、3つのループ文を持ちます:for
-in
文、while
文、そしてrepeat
-while
文。
Control flow in a loop statement can be changed by a break
statement and a continue
statement and is discussed in Break Statement and Continue Statement below.
ループ文の中の制御の流れは、break
文そしてcontinue
文によって変えられることができます、そして下記のブレーク文と継続文で議論されます。
Grammar of a loop statement ループ文の文法
loop-statement → for-in-statement
loop-statement → while-statement
loop-statement → repeat-while-statement
For-In Statement¶ For-In文¶
A for
-in
statement allows a block of code to be executed once for each item in a collection (or any type) that conforms to the Sequence
protocol.
for
-in
文は、コードの1ブロックをSequence
プロトコルに準拠するあるコレクション(または何らかの型)の中のそれぞれの項目に対して一度だけ実行されるようにします。
A for
-in
statement has the following form:
for
-in
文は、以下の形式を持ちます:
- for item in collection {
- statements
- }
The makeIterator()
method is called on the collection expression to obtain a value of an iterator type—that is, a type that conforms to the IteratorProtocol
protocol. The program begins executing a loop by calling the next()
method on the iterator. If the value returned isn’t nil
, it’s assigned to the item pattern, the program executes the statements, and then continues execution at the beginning of the loop. Otherwise, the program doesn’t perform assignment or execute the statements, and it’s finished executing the for
-in
statement.
makeIterator()
メソッドがcollection(コレクション)式の上で呼ばれて、イテレータ型 ― すなわち、IteratorProtocol
プロトコルに準拠する型、に属する1つの値を取得します。プログラムは、そのイテレータ上でnext()
メソッドを呼ぶことによってループの実行を始めます。返される値がnil
でないならば、それはitem(項目)パターンに割り当てられて、プログラムはstatements(文)を実行して、それからループの初めに戻って実行を続けます。そうでなければ、プログラムは代入を実行しませんし、文を実行しません、そしてそれはfor
-in
文の実行を終了します。
Grammar of a for-in statement for-in文の文法
for-in-statement → for
case
opt pattern in
expression where-clause opt code-block
While Statement¶ while文¶
A while
statement allows a block of code to be executed repeatedly, as long as a condition remains true.
while
文は、条件が真のままである限り、コードの1ブロックを繰り返して実行されるようにします。
A while
statement has the following form:
while
文は、以下の形式を持ちます:
- while condition {
- statements
- }
A while
statement is executed as follows:
while
文は、次のように実行されます:
-
The condition is evaluated. 条件が評価されます。
If
true
, execution continues to step 2. Iffalse
, the program is finished executing thewhile
statement.true
ならば、実行はステップ2に続きます。false
ならば、プログラムはwhile
文の実行を終了します。 -
The program executes the statements, and execution returns to step 1. プログラムは文を実行します、そして実行はステップ1に戻ります。
Because the value of the condition is evaluated before the statements are executed, the statements in a while
statement can be executed zero or more times.
文が実行される前に、条件の値が評価されるので、while
文の中の文は0回またはそれ以上実行される可能性を持ちます。
The value of the condition must be of type Bool
or a type bridged to Bool
. The condition can also be an optional binding declaration, as discussed in Optional Binding.
conditionの値は、Bool
型またはBool
にブリッジされる型でなければなりません。条件はまた、オプショナル束縛で議論される、オプショナル束縛宣言であることができます。
Grammar of a while statement while文の文法
while-statement → while
condition-list code-block
condition-list → condition | condition ,
condition-list
condition → expression | availability-condition | case-condition | optional-binding-condition
case-condition → case
pattern initializer
optional-binding-condition → let
pattern initializer | var
pattern initializer
Repeat-While Statement¶ repeat-while文¶
A repeat
-while
statement allows a block of code to be executed one or more times, as long as a condition remains true.
repeat
-while
文は、ある条件が真のままである限り、ひとかたまりのコードを一回以上実行されるようにします。
A repeat
-while
statement has the following form:
repeat
-while
文は、以下の形式を持ちます:
- repeat {
- statements
- } while condition
A repeat
-while
statement is executed as follows:
repeat
-while
文は、次のように実行されます:
-
The program executes the statements, and execution continues to step 2. プログラムが文を実行します、そして実行はステップ2に続きます。
-
The condition is evaluated. 条件が評価されます。
If
true
, execution returns to step 1. Iffalse
, the program is finished executing therepeat
-while
statement.true
ならば、実行はステップ1に戻ります。false
ならば、プログラムはrepeat
-while
文の実行を終了します。
Because the value of the condition is evaluated after the statements are executed, the statements in a repeat
-while
statement are executed at least once.
文が実行された後で条件の値が評価されるので、repeat
-while
文の中の文は少なくとも一回は実行されます。
The value of the condition must be of type Bool
or a type bridged to Bool
. The condition can also be an optional binding declaration, as discussed in Optional Binding.
conditionの値は、Bool
型またはBool
にブリッジされる型でなければなりません。条件はまた、オプショナル束縛で議論される、オプショナル束縛宣言であることができます。
Grammar of a repeat-while statement repeat-while文の文法
repeat-while-statement → repeat
code-block while
expression
Branch Statements¶ 分岐文¶
Branch statements allow the program to execute certain parts of code depending on the value of one or more conditions. The values of the conditions specified in a branch statement control how the program branches and, therefore, what block of code is executed. Swift has three branch statements: an if
statement, a guard
statement, and a switch
statement.
分岐文は、プログラムが1つ以上の条件の値に従いコードの特定の部分を実行するようにします。分岐文において指定される条件の値は、プログラムがどのように分岐するか、したがって、コードのどのブロックが実行されるかについて制御します。スウィフトは、3つの分岐文を持ちます:if
文、guard
文、そしてswitch
文。
Control flow in an if
statement or a switch
statement can be changed by a break
statement and is discussed in Break Statement below.
if
文またはswitch
文の中の制御の流れは、break
文によって変えられることができます、それは下記のブレーク文で議論されます。
Grammar of a branch statement 分岐文の文法
branch-statement → if-statement
branch-statement → guard-statement
branch-statement → switch-statement
If Statement¶ if文¶
An if
statement is used for executing code based on the evaluation of one or more conditions.
if
文は、1つ以上の条件の評価に基づいてコードを実行するために使われます。
There are two basic forms of an if
statement. In each form, the opening and closing braces are required.
if
文の2つの基本の書式があります。各形式で、開始と終了の波括弧は必須です。
The first form allows code to be executed only when a condition is true and has the following form: 最初の形式は、条件が真である時にだけコードが実行されるようにし、以下の形式を持ちます:
- if condition {
- statements
- }
The second form of an if
statement provides an additional else clause (introduced by the else
keyword) and is used for executing one part of code when the condition is true and another part of code when the same condition is false. When a single else clause is present, an if
statement has the following form:
if
文の2番目の形式は、追加のelse節(代わりの節)を提供します(else
キーワードで導入されます)、そして条件が真である場合はあるコード部分を、そして同じ条件が偽である場合は別のコード部分を実行するために使われます。ただ1つだけのelse節が含まれている時は、if
文は以下の形式を持ちます:
- if condition {
- statements to execute if condition is true
- } else {
- statements to execute if condition is false
- }
The else clause of an if
statement can contain another if
statement to test more than one condition. An if
statement chained together in this way has the following form:
if
文のelse節は、複数の条件をテストするために別のif
文を含むことができます。このやり方で一緒につながれるif
文は、以下の形式を持ちます:
- if condition 1 {
- statements to execute if condition 1 is true
- } else if condition 2 {
- statements to execute if condition 2 is true
- } else {
- statements to execute if both conditions are false
- }
The value of any condition in an if
statement must be of type Bool
or a type bridged to Bool
. The condition can also be an optional binding declaration, as discussed in Optional Binding.
if
文の中のあらゆる条件の値は、Bool
型またはBool
にブリッジされる型でなければなりません。条件はまた、オプショナル束縛で議論される、オプショナル束縛宣言であることができます。
Grammar of an if statement if文の文法
if-statement → if
condition-list code-block else-clause opt
else-clause → else
code-block | else
if-statement
Guard Statement¶ guard文¶
A guard
statement is used to transfer program control out of a scope if one or more conditions aren’t met.
guard
文は、1つ以上の条件が満たされないならば、プログラムの制御をあるスコープの外に転移させるために使われます。
A guard
statement has the following form:
guard
文は以下の形式を持ちます:
- guard condition else {
- statements
- }
The value of any condition in a guard
statement must be of type Bool
or a type bridged to Bool
. The condition can also be an optional binding declaration, as discussed in Optional Binding.
guard
文の中のあらゆる条件の値は、Bool
型またはBool
にブリッジされる型でなければなりません。条件はまた、オプショナル束縛で議論される、オプショナル束縛宣言であることができます。
Any constants or variables assigned a value from an optional binding declaration in a guard
statement condition can be used for the rest of the guard statement’s enclosing scope.
guard
文条件の中のオプショナル束縛宣言由来のあらゆる定数または変数は、guard文の囲むスコープの他の部分で使われることができます。
The else
clause of a guard
statement is required, and must either call a function with the Never
return type or transfer program control outside the guard statement’s enclosing scope using one of the following statements:
guard
文のelse
節は必ず必要です、そしてNever
戻り型を持つ関数を呼び出すか、プログラム制御をguard文の囲むスコープの外側に以下の文のうちの1つを使って移すか、どちらかをする必要があります。
return
break
continue
throw
Control transfer statements are discussed in Control Transfer Statements below. For more information on functions with the Never
return type, see Functions that Never Return.
制御移動文は、下の制御移動文で議論されます。Never
戻り型を持つ関数でのさらなる情報は、決して戻らない関数を見てください。
Grammar of a guard statement guard文の文法
guard-statement → guard
condition-list else
code-block
Switch Statement¶ スイッチ文¶
A switch
statement allows certain blocks of code to be executed depending on the value of a control expression.
switch
文は、コードの特定のブロックをある制御式の値に従って実行されるようにします。
A switch
statement has the following form:
switch
文は以下の形式を持ちます:
- switch control expression {
- case pattern 1:
- statements
- case pattern 2 where condition:
- statements
- case pattern 3 where condition,
- pattern 4 where condition:
- statements
- default:
- statements
- }
The control expression of the switch
statement is evaluated and then compared with the patterns specified in each case. If a match is found, the program executes the statements listed within the scope of that case. The scope of each case can’t be empty. As a result, you must include at least one statement following the colon (:
) of each case label. Use a single break
statement if you don’t intend to execute any code in the body of a matched case.
switch
文の制御式は、評価されて、それからそれぞれのケース節(case)で指定されるパターンと比較されます。マッチが見つけられるならば、プログラムはそのケース節のスコープ内で列記される文を実行します。それぞれのケース節のスコープは、空であることはできません。その結果、あなたはそれぞれのケース節ラベルのコロン(:
)に続いている文を少なくとも1つは含めなければなりません。あなたがマッチされたケース節の本文において何らコードを実行するつもりでないならば、ただ1つbreak
文を使ってください。
The values of expressions your code can branch on are very flexible. For example, in addition to the values of scalar types, such as integers and characters, your code can branch on the values of any type, including floating-point numbers, strings, tuples, instances of custom classes, and optionals. The value of the control expression can even be matched to the value of a case in an enumeration and checked for inclusion in a specified range of values. For examples of how to use these various types of values in switch
statements, see Switch in Control Flow.
あなたのコードが分岐することができる式の値は、非常に柔軟です。たとえば、整数と文字のようなスカラー型の値に加えて、あなたのコードは、浮動小数点数、文字列、タプル、あつらえのクラスのインスタンス、そしてオプショナルを含むあらゆる型の値に関して分岐することができます。制御式の値は、列挙でのケース節の値にさえマッチすることや、指定された範囲の値に包含されるかについて調べさえすることができます。これらのいろいろな型の値をswitch
文で使う方法の例のために、スイッチを制御の流れで見てください。
A switch
case can optionally contain a where
clause after each pattern. A where clause is introduced by the where
keyword followed by an expression, and is used to provide an additional condition before a pattern in a case is considered matched to the control expression. If a where
clause is present, the statements within the relevant case are executed only if the value of the control expression matches one of the patterns of the case and the expression of the where
clause evaluates to true
. For example, a control expression matches the case in the example below only if it’s a tuple that contains two elements of the same value, such as (1, 1)
.
switch
ケース節は、各パターンの後に随意にwhere
節を含むことができます。where節は、キーワードwhere
のあとにひとつの式を続けることによって導入されます、そしてケース節の中のあるパターンがその制御式にマッチしたと考えられるより前に更なる条件を与えるために使われます。where
節が存在するならば、関連するケース節の範囲内のいくらかの文は、制御式の値がケース節のパターンの1つとマッチして、そしてwhere
節がtrue
に評価される場合にだけ、実行されます。例えば、ある制御式は、それが同じ値の2つの要素を持つタプル、例えば(1, 1)
のようなものである場合にのみ、以下の例におけるケース節にマッチします。
- case let (x, y) where x == y:
As the above example shows, patterns in a case can also bind constants using the let
keyword (they can also bind variables using the var
keyword). These constants (or variables) can then be referenced in a corresponding where
clause and throughout the rest of the code within the scope of the case. If the case contains multiple patterns that match the control expression, all of the patterns must contain the same constant or variable bindings, and each bound variable or constant must have the same type in all of the case’s patterns.
上の例で示されるように、あるケース節中のいくつかのパターンはまた、let
キーワードを使って定数に束縛できます(それらはまたvar
キーワードを使って変数に束縛もできます)。これらの定数(または変数)は、それから対応するwhere
節の中で、そしてそのケース節のスコープ内のその他のコードのいたるところで参照されることができます。制御式にマッチする複数のパターンをケース節が含むならば、そのパターンのすべてが同じ定数または変数束縛を含まなければなりません、そして束縛された変数または定数の各々は、そのケース節の持つパターンのすべてで同じ型を持たなければなりません。
A switch
statement can also include a default case, introduced by the default
keyword. The code within a default case is executed only if no other cases match the control expression. A switch
statement can include only one default case, which must appear at the end of the switch
statement.
switch
文はまた、キーワードdefault
によって導入される、省略時のケース節を含むことができます。他のいかなるケース節も制御式にマッチしない場合だけ、省略時のケース節内のコードは実行されます。switch
文は1つの省略時のケース節だけを含むことができます、それは、switch
文の終わりに現れなければなりません。
Although the actual execution order of pattern-matching operations, and in particular the evaluation order of patterns in cases, is unspecified, pattern matching in a switch
statement behaves as if the evaluation is performed in source order—that is, the order in which they appear in source code. As a result, if multiple cases contain patterns that evaluate to the same value, and thus can match the value of the control expression, the program executes only the code within the first matching case in source order.
けれどもパターンマッチ操作の実際の実行順序、とりわけケース節の中のパターンの評価順序は指定されません、switch
文のパターンマッチングはまるでその評価がソース順 ― すなわち、それらがソース・コードにおいて現れる順番、で実行されるかのようにふるまいます。その結果、複数のケース節が同じ値に評価される、そしてそれゆえ制御式の値にマッチすることができるパターンを含むならば、プログラムはソース順において最初のマッチしているケース節内のコードだけを実行します。
Switch Statements Must Be Exhaustive¶ スイッチ文は徹底的でなければなりません¶
In Swift, every possible value of the control expression’s type must match the value of at least one pattern of a case. When this simply isn’t feasible (for example, when the control expression’s type is Int
), you can include a default case to satisfy the requirement.
スウィフトにおいて、制御式のもつ型のあらゆる可能な値は、少なくともあるケース節の1つのパターンの値にマッチしなければなりません。これが単に実行可能でないとき(たとえば、制御式のもつ型がInt
であるとき)、あなたはこの必要条件を満たすために省略時のケース節を含めることができます。
Switching Over Future Enumeration Cases¶ 未来列挙ケース節に対してスイッチする¶
A nonfrozen enumeration is a special kind of enumeration that may gain new enumeration cases in the future—even after you compile and ship an app. Switching over a nonfrozen enumeration requires extra consideration. When a library’s authors mark an enumeration as nonfrozen, they reserve the right to add new enumeration cases, and any code that interacts with that enumeration must be able to handle those future cases without being recompiled. Code that’s compiled in library evolution mode, code in the standard library, Swift overlays for Apple frameworks, and C and Objective-C code can declare nonfrozen enumerations. For information about frozen and nonfrozen enumerations, see frozen. 非凍結列挙は特別な種類の列挙です、それは新しい列挙ケース節を将来に — あなたがアプリをコンパイルおよび出荷する後でさえ、手に入れるかもしれないものです。非凍結列挙に対してスイッチすることは、余分な考慮を必要とします。あるライブラリの作者たちがある列挙を非凍結として印する時、彼らは新しい列挙ケース節を加える権利を有します、そしてその列挙と相互作用する何らかのコードは、それらの未来ケース節を再コンパイルされることなしに取り扱いできる必要があります。ライブラリ進化モードでコンパイルされるコード、標準ライブラリでのコード、Appleフレームワークに対するスウィフトオーバーレイ、そしてCとObjective-Cコードは、非凍結列挙を宣言できます。凍結および非凍結列挙についての情報として、frozenを見てください。
When switching over a nonfrozen enumeration value, you always need to include a default case, even if every case of the enumeration already has a corresponding switch case. You can apply the @unknown
attribute to the default case, which indicates that the default case should match only enumeration cases that are added in the future. Swift produces a warning if the default case matches any enumeration case that’s known at compiler time. This future warning informs you that the library author added a new case to the enumeration that doesn’t have a corresponding switch case.
非凍結列挙値に対してスイッチしている時、あなたは常にdefaultケース節を含む必要があります、たとえ列挙のあらゆるケース節が既に対応するスイッチケース節を持つとしてもです。あなたは@unknown
属性をdefaultケース節に適用できます、それはそのdefaultケース節が、将来に加えられる列挙ケース節だけに合致すべきであることを指し示します。スウィフトは警告を生成します、もしそのdefaultケース節がコンパイル時に既知である何らかの列挙ケース節に合致するならば。この未来警告は、対応するスイッチケース節を持たない列挙にライブラリ作者がある新しいケース節を加えたことをあなたに告知します。
The following example switches over all three existing cases of the standard library’s Mirror.AncestorRepresentation
enumeration. If you add additional cases in the future, the compiler generates a warning to indicate that you need to update the switch statement to take the new cases into account.
以下の例は、標準ライブラリのもつMirror.AncestorRepresentation
列挙の3つの既存のケース節すべてに対してスイッチします。あなたが追加のケース節を将来において加えるならば、コンパイラは警告を生成して、あなたがスイッチ文を更新して新しいケース節を考慮に入れる必要があることを指し示します。
- let representation: Mirror.AncestorRepresentation = .generated
- switch representation {
- case .customized:
- print("Use the nearest ancestor’s implementation.")
- case .generated:
- print("Generate a default mirror for all ancestor classes.")
- case .suppressed:
- print("Suppress the representation of all ancestor classes.")
- @unknown default:
- print("Use a representation that was unknown when this code was compiled.")
- }
- // Prints "Generate a default mirror for all ancestor classes."
Execution Does Not Fall Through Cases Implicitly¶ 実行は暗黙のうちにケース節を抜け落ちません¶
After the code within a matched case has finished executing, the program exits from the switch
statement. Program execution doesn’t continue or “fall through” to the next case or default case. That said, if you want execution to continue from one case to the next, explicitly include a fallthrough
statement, which simply consists of the fallthrough
keyword, in the case from which you want execution to continue. For more information about the fallthrough
statement, see Fallthrough Statement below.
マッチされたケース節内のコードが実行を終えたあと、プログラムはswitch
文から出ます。プログラム実行は続きません、あるいは、次のケース節または省略時のケース節に「抜け落ちる」ことはありません。それでもやはり、あなたが実行に1つのケース節から次のものまで続いて欲しいならば、あなたが実行に続いて欲しいケース節で明示的にfallthrough
文を含めてください、それは、単にキーワードfallthrough
から成ります。fallthrough
文の詳細については、下記のフォールスルー文を見てください。
Grammar of a switch statement switch文の文法
switch-statement → switch
expression {
switch-cases opt }
switch-cases → switch-case switch-cases opt
switch-case → case-label statements
switch-case → default-label statements
switch-case → conditional-switch-case
case-label → attributes opt case
case-item-list :
case-item-list → pattern where-clause opt | pattern where-clause opt ,
case-item-list
default-label → attributes opt default
:
where-clause → where
where-expression
where-expression → expression
conditional-switch-case → switch-if-directive-clause switch-elseif-directive-clauses opt switch-else-directive-clause opt endif-directive
switch-if-directive-clause → if-directive compilation-condition switch-cases opt
switch-elseif-directive-clauses → elseif-directive-clause switch-elseif-directive-clauses opt
switch-elseif-directive-clause → elseif-directive compilation-condition switch-cases opt
switch-else-directive-clause → else-directive switch-cases opt
Labeled Statement¶ ラベルをつけられた文¶
You can prefix a loop statement, an if
statement, a switch
statement, or a do
statement with a statement label, which consists of the name of the label followed immediately by a colon (:). Use statement labels with break
and continue
statements to be explicit about how you want to change control flow in a loop statement or a switch
statement, as discussed in Break Statement and Continue Statement below.
あなたはループ文、if
文、switch
文、またはdo
文の前に文ラベルを置くことができます、それは、ラベルの名前とそれに直ちに続くコロン(:)から成ります。break
とcontinue
文で文ラベルを使って、あなたがループ文またはswitch
文においてどのように制御の流れを変えたいかについて明示してください、下記のブレーク文と継続文で議論されるように。
The scope of a labeled statement is the entire statement following the statement label. You can nest labeled statements, but the name of each statement label must be unique. ラベルをつけられた文のスコープは、文ラベルに続いている文全体です。あなたはラベルをつけられた文を入れ子にすることができます、しかし、各文ラベルの名前は特有でなければなりません。
For more information and to see examples of how to use statement labels, see Labeled Statements in Control Flow. より多くの情報のために、そして、文ラベルを使用する方法の例を見るために、ラベルをつけられた文を制御の流れで見てください。
Grammar of a labeled statement ラベルをつけられた文の文法
labeled-statement → statement-label loop-statement
labeled-statement → statement-label if-statement
labeled-statement → statement-label switch-statement
labeled-statement → statement-label do-statement
statement-label → label-name :
label-name → identifier
Control Transfer Statements¶ 制御移動文¶
Control transfer statements can change the order in which code in your program is executed by unconditionally transferring program control from one piece of code to another. Swift has five control transfer statements: a break
statement, a continue
statement, a fallthrough
statement, a return
statement, and a throw
statement.
制御移動文は、あなたのプログラムの中のコードが実行される順番を、プログラム制御を1つのコード片から他のものまで無条件に移すことによって変えることができます。スウィフトは、5つの制御移動文を持ちます:break
文、continue
文、fallthrough
文、return
文、そしてthrow
文。
Grammar of a control transfer statement 制御移動文の文法
control-transfer-statement → break-statement
control-transfer-statement → continue-statement
control-transfer-statement → fallthrough-statement
control-transfer-statement → return-statement
control-transfer-statement → throw-statement
Break Statement¶ ブレーク文¶
A break
statement ends program execution of a loop, an if
statement, or a switch
statement. A break
statement can consist of only the break
keyword, or it can consist of the break
keyword followed by the name of a statement label, as shown below.
break
文は、ループ、if
文、またはswitch
文のプログラム実行を終えます。break
文はキーワードbreak
だけから成ることができます、あるいは、それは、以下に示すように、キーワードbreak
とそれに続く文ラベルの名前から成ることができます。
- break
- break label name
When a break
statement is followed by the name of a statement label, it ends program execution of the loop, if
statement, or switch
statement named by that label.
break
文に文ラベルの名前が続くとき、それはそのラベルによって指定されるループ、if
文、またはswitch
文のプログラム実行を終了します。
When a break
statement isn’t followed by the name of a statement label, it ends program execution of the switch
statement or the innermost enclosing loop statement in which it occurs. You can’t use an unlabeled break
statement to break out of an if
statement.
break
文に文ラベルの名前が続かないとき、それはswitch
文またはそれが現れているところの最も内側のそれを囲んでいるループ文のプログラム実行を終了します。あなたは、ラベルを付けられないbreak
文をif
文を脱するために使うことはできません。
In both cases, program control is then transferred to the first line of code following the enclosing loop or switch
statement, if any.
両方の場合において、プログラム制御はそれから、もしあれば、それを囲んでいるループまたはswitch
文に続くコードの最初の行へ移されます。
For examples of how to use a break
statement, see Break and Labeled Statements in Control Flow.
break
文を使う方法の例のために、ブレークとラベルをつけられた文を章制御の流れで見てください。
Grammar of a break statement ブレーク文の文法
break-statement → break
label-name opt
Continue Statement¶ 継続文¶
A continue
statement ends program execution of the current iteration of a loop statement but doesn’t stop execution of the loop statement. A continue
statement can consist of only the continue
keyword, or it can consist of the continue
keyword followed by the name of a statement label, as shown below.
continue
文は、ループ文の現在の繰り返しのプログラム実行を終了しますが、ループ文の実行は止めません。continue
文は、以下に示すように、キーワードcontinue
だけから成ることができます、また、それはキーワードcontinue
とそれに続く文ラベルから成ることができます。
- continue
- continue label name
When a continue
statement is followed by the name of a statement label, it ends program execution of the current iteration of the loop statement named by that label.
continue
文に文ラベルの名前が続くとき、それは、そのラベルによって指名されるループ文の現在の繰り返しのプログラム実行を終了します。
When a continue
statement isn’t followed by the name of a statement label, it ends program execution of the current iteration of the innermost enclosing loop statement in which it occurs.
continue
文に文ラベルの名前が続かないとき、それは、それが現れるところの一番内側のそれを囲んでいるループ文の現在の繰り返しのプログラム実行を終了します。
In both cases, program control is then transferred to the condition of the enclosing loop statement. 両方の場合において、プログラム制御はそれから囲んでいるループ文の条件へ移されます。
In a for
statement, the increment expression is still evaluated after the continue
statement is executed, because the increment expression is evaluated after the execution of the loop’s body.
for
文において、増加式はcontinue
文が実行されたあと依然として評価されます、なぜなら増加式がループの本文の実行の後に評価されるためです。
For examples of how to use a continue
statement, see Continue and Labeled Statements in Control Flow.
continue
文を使う方法の例のために、続けるとラベルをつけられた文を章制御の流れで見てください。
Grammar of a continue statement 継続文の文法
continue-statement → continue
label-name opt
Fallthrough Statement¶ フォールスルー文¶
A fallthrough
statement consists of the fallthrough
keyword and occurs only in a case block of a switch
statement. A fallthrough
statement causes program execution to continue from one case in a switch
statement to the next case. Program execution continues to the next case even if the patterns of the case label don’t match the value of the switch
statement’s control expression.
fallthrough
文は、fallthrough
キーワードから成って、switch
文のケース節ブロックだけに現れます。fallthrough
文によって、プログラム実行がswitch
文の1つのケース節から次のケース節に続くようになります。たとえケース節ラベルのパターンがswitch
文のもつ制御式の値にマッチしないとしても、プログラム実行は次のケース節に続きます。
A fallthrough
statement can appear anywhere inside a switch
statement, not just as the last statement of a case block, but it can’t be used in the final case block. It also can’t transfer control into a case block whose pattern contains value binding patterns.
fallthrough
文は、switch
文のどこにでも現れることができます、あるケース節ブロックの最後の文としてだけではなく、しかしそれは最後のケース節ブロックにおいては使われることができません。それはまた、パターンが値束縛パターンを含むケース節ブロックに制御を移すことができません。
For an example of how to use a fallthrough
statement in a switch
statement, see Control Transfer Statements in Control Flow.
fallthrough
文をswitch
文において使う方法の例のために、制御移動文を章制御の流れで見てください。
Return Statement¶ 復帰文¶
A return
statement occurs in the body of a function or method definition and causes program execution to return to the calling function or method. Program execution continues at the point immediately following the function or method call.
return
文は、関数またはメソッド定義の本文に現れて、プログラム実行を関数またはメソッド呼んでいるところに戻るようにします。プログラム実行は、関数またはメソッド呼び出しに直ちに続いている地点に続きます。
A return
statement can consist of only the return
keyword, or it can consist of the return
keyword followed by an expression, as shown below.
return
文はキーワードreturn
だけから成ることができます、あるいはそれは、以下に示すように、キーワードreturn
とそれに続く式から成ることができます。
- return
- return expression
When a return
statement is followed by an expression, the value of the expression is returned to the calling function or method. If the value of the expression doesn’t match the value of the return type declared in the function or method declaration, the expression’s value is converted to the return type before it’s returned to the calling function or method.
return
文の後に式が続くとき、式の値は関数またはメソッドを呼んでいるところに返されます。式の値が関数またはメソッド宣言において宣言される戻り型の値にマッチしないならば、それが関数またはメソッドを呼んでいるところに返される前に、式の値は戻り型に変換されます。
Note 注意
As described in Failable Initializers, a special form of the return
statement (return nil
) can be used in a failable initializer to indicate initialization failure.
失敗できるイニシャライザで記述されるように、return
文の特別な形式(return nil
)は、失敗できるイニシャライザの中で使用されて初期化失敗を指し示すことができます。
When a return
statement isn’t followed by an expression, it can be used only to return from a function or method that doesn’t return a value (that is, when the return type of the function or method is Void
or ()
).
return
文の後に式が続かないとき、それは値を返さない関数またはメソッド(すなわち、戻り型がVoid
または()
である関数またはメソッド)から返るためにだけ使われることができます。
Grammar of a return statement return文の文法
return-statement → return
expression opt
Throw Statement¶ throw文¶
A throw
statement occurs in the body of a throwing function or method, or in the body of a closure expression whose type is marked with the throws
keyword.
throw
文はスロー関数やメソッドの本文中に、またはthrows
キーワードで印される型のクロージャ式の中に現れます。
A throw
statement causes a program to end execution of the current scope and begin error propagation to its enclosing scope. The error that’s thrown continues to propagate until it’s handled by a catch
clause of a do
statement.
throw
文は、プログラムに現在のスコープの実行を終了させます、そしてそれを囲んでいるスコープにエラーの伝達を始めます。スローされたエラーは、それがdo
文のcatch
節によって処理されるまで伝達を続けていきます。
A throw
statement consists of the throw
keyword followed by an expression, as shown below.
throw
文は、以下のように、throw
キーワードとそれに続くひとつの式から成ります。
- throw expression
The value of the expression must have a type that conforms to the Error
protocol.
expression(式)の値は、Error
プロトコルに準拠する型を持たなければなりません。
For an example of how to use a throw
statement, see Propagating Errors Using Throwing Functions in Error Handling.
throw
文を使う方法の例のために、スロー関数を使ってエラーを伝えるをエラー処理の章で見てください。
Grammar of a throw statement スロー文の文法
throw-statement → throw
expression
Defer Statement¶ defer文¶
A defer
statement is used for executing code just before transferring program control outside of the scope that the defer
statement appears in.
defer
文は、defer
文が現れるスコープの外側にプログラムの制御を移す直前でのコード実行のために使われます。
A defer
statement has the following form:
defer
文は以下の形式を持ちます:
- defer {
- statements
- }
The statements within the defer
statement are executed no matter how program control is transferred. This means that a defer
statement can be used, for example, to perform manual resource management such as closing file descriptors, and to perform actions that need to happen even if an error is thrown.
defer
文内の文は、どのようにプログラム制御が移されようと関係なく実行されます。これはdefer
文が、例えば、ファイル記述子を閉じることなどの手動リソース管理を実行するために、そしてたとえエラーがスローされるとしても起こることが必要な動作を実行するために使われることができるのを意味します。
If multiple defer
statements appear in the same scope, the order they appear is the reverse of the order they’re executed. Executing the last defer
statement in a given scope first means that statements inside that last defer
statement can refer to resources that will be cleaned up by other defer
statements.
複数のdefer
文が同じスコープに現れるならば、それらが現れる順番が、それらが実行される順番の逆です。ある特定のスコープ中の最後のdefer
文の実行が最初であることは、その最後のdefer
文内の文は別のdefer
文によってクリーンアップされることになるリソースを参照できるのを意味します。
- func f() {
- defer { print("First defer") }
- defer { print("Second defer") }
- print("End of function")
- }
- f()
- // Prints "End of function"
- // Prints "Second defer"
- // Prints "First defer"
The statements in the defer
statement can’t transfer program control outside of the defer
statement.
defer
文の中の文は、プログラムの制御をdefer
文の外側に移すことはできません。
Grammar of a defer statement defer文の文法
defer-statement → defer
code-block
Do Statement¶ do文¶
The do
statement is used to introduce a new scope and can optionally contain one or more catch
clauses, which contain patterns that match against defined error conditions. Variables and constants declared in the scope of a do
statement can be accessed only within that scope.
do
文は、ある新しいスコープを導入するために使われます、そして随意に1つ以上のcatch
節を含むことができ、それは定義されたエラー条件にマッチするパターンを複数含みます。do
文のスコープ内で宣言される変数と定数は、そのスコープ内でのみアクセスされることができます。
A do
statement in Swift is similar to curly braces ({}
) in C used to delimit a code block, and doesn’t incur a performance cost at runtime.
スウィフトのdo
文は、Cにおいてひとつのコードのブロックの境界を定めるために使われる波括弧({}
)に似ていて、実行時に性能上の損失を被りません。
A do
statement has the following form:
do
文は以下の形式を持ちます:
- do {
- try expression
- statements
- } catch pattern 1 {
- statements
- } catch pattern 2 where condition {
- statements
- } catch pattern 3, pattern 4 where condition {
- statements
- } catch {
- statements
- }
If any statement in the do
code block throws an error, program control is transferred to the first catch
clause whose pattern matches the error. If none of the clauses match, the error propagates to the surrounding scope. If an error is unhandled at the top level, program execution stops with a runtime error.
do
コードブロックの中の何らかの文がエラーをスローするならば、プログラム制御は、それのパターンがエラーと合致する最初のcatch
節に移されます。それら条項のどれも合致しないならば、エラーは周囲のスコープへと伝えられます。エラーがトップレベルで取り扱われないならば、プログラム遂行はランタイムエラーで停止します。
Like a switch
statement, the compiler attempts to infer whether catch
clauses are exhaustive. If such a determination can be made, the error is considered handled. Otherwise, the error can propagate out of the containing scope, which means the error must be handled by an enclosing catch
clause or the containing function must be declared with throws
.
switch
文のように、コンパイラはcatch
節が網羅的であるか推論を試みます。そのような決定が為されるならば、エラーは処理されたと判断されます。そうでなければ、エラーはそれを収容しているスコープの外に伝えられることができます、それが意味するのは、エラーは周りを囲んでいるcatch
節によって取り扱われなければならない、またはそれを収容している関数はthrows
で宣言されなければならないということです。
A catch
clause that has multiple patterns matches the error if any of its patterns match the error. If a catch
clause contains multiple patterns, all of the patterns must contain the same constant or variable bindings, and each bound variable or constant must have the same type in all of the catch
clause’s patterns.
複数のパターンを持つcatch
節は、エラーと合致します、それのパターンのどれかがそのエラーと合致するならば。catch
節が複数のパターンを含むならば、パターンの全ては同じ定数または変数バインディングを含まなければなりません、そして各バインドされた変数または定数は、catch
節のもつパターンの全てにおいて同じ型を持たなければなりません。
To ensure that an error is handled, use a catch
clause with a pattern that matches all errors, such as a wildcard pattern (_
). If a catch
clause doesn’t specify a pattern, the catch
clause matches and binds any error to a local constant named error
. For more information about the patterns you can use in a catch
clause, see Patterns.
エラーが処理されることが保証されるように、あるひとつのcatch
節をどんなエラーにもマッチするパターンとともに使ってください、例えばワイルドカードパターン(_
)など。catch
節がパターンを指定しないならば、そのcatch
節はあらゆるエラーに合致してerror
と名前をつけられるローカル定数へとバインドします。あなたがcatch
節において使うパターンについての更なる情報として、パターンを見てください。
To see an example of how to use a do
statement with several catch
clauses, see Handling Errors.
do
文を複数のcatch
節とともに使う方法の例を見るために、エラーを処理するを見てください。
Grammar of a do statement do文の文法
do-statement → do
code-block catch-clauses opt
catch-clauses → catch-clause catch-clauses opt
catch-clause → catch
catch-pattern-list opt code-block
catch-pattern-list → catch-pattern | catch-pattern ,
catch-pattern-list
catch-pattern → pattern where-clause opt
Compiler Control Statements¶ コンパイラ制御文¶
Compiler control statements allow the program to change aspects of the compiler’s behavior. Swift has three compiler control statements: a conditional compilation block a line control statement, and a compile-time diagnostic statement. コンパイラ制御文は、プログラムに、コンパイラの挙動の様々な面を変更できるようにします。スウィフトは、3つのコンパイラ制御文:条件コンパイルブロック、行制御文、そしてコンパイル時診断文を持ちます。
Grammar of a compiler control statement コンパイラ制御文の文法
compiler-control-statement → conditional-compilation-block
compiler-control-statement → line-control-statement
compiler-control-statement → diagnostic-statement
Conditional Compilation Block¶ 条件コンパイルブロック¶
A conditional compilation block allows code to be conditionally compiled depending on the value of one or more compilation conditions. 条件コンパイルブロックは、1つ以上のコンパイル条件の値に依存してコードが条件付きでコンパイルされるようにします。
Every conditional compilation block begins with the #if
compilation directive and ends with the #endif
compilation directive. A simple conditional compilation block has the following form:
すべての条件コンパイルブロックは、#if
コンパイル指令で始まって、#endif
コンパイル指令で終わります。単純な条件コンパイルブロックは、以下の形式を持ちます:
- #if compilation condition
- statements
- #endif
Unlike the condition of an if
statement, the compilation condition is evaluated at compile time. As a result, the statements are compiled and executed only if the compilation condition evaluates to true
at compile time.
if
文の条件とは違い、compilation condition(コンパイル条件)はコンパイル時に評価されます。結果として、statements(文)がコンパイル及び実行されるのはcompilation conditionがコンパイル時にtrue
に評価される場合に限ります。
The compilation condition can include the true
and false
Boolean literals, an identifier used with the -D
command line flag, or any of the platform conditions listed in the table below.
compilation conditionは、true
とfalse
のブールのリテラル、-D
コマンドラインフラグと共に使われる識別子、もしくは以下の表で列記されるプラットホーム条件を含むことができます。
Platform condition プラットホーム条件 | Valid arguments 有効な引数 |
---|---|
os() |
macOS , iOS , watchOS , tvOS , Linux , Windows
|
arch() |
i386 , x86_64 , arm , arm64
|
swift() |
>= or < followed by a version number
>= または< にバージョン番号が続きます
|
compiler() |
>= or < followed by a version number
>= または< にバージョン番号が続きます
|
canImport() |
A module name あるモジュール名 |
targetEnvironment() |
simulator , macCatalyst
|
The version number for the swift()
and compiler()
platform conditions consists of a major number, optional minor number, optional patch number, and so on, with a dot (.
) separating each part of the version number. There must not be whitespace between the comparison operator and the version number. The version for compiler()
is the compiler version, regardless of the Swift version setting passed to the compiler. The version for swift()
is the language version currently being compiled. For example, if you compile your code using the Swift 5 compiler in Swift 4.2 mode, the compiler version is 5 and the language version is 4.2. With those settings, the following code prints all three messages:
swift()
およびcompiler()
プラットホーム条件のためのバージョン番号は、メジャー番号、随意のマイナー番号、随意のパッチ番号、その他と、バージョン番号の各部を区切っているドット(.
)から成ります。比較演算子とバージョン番号の間に空白があってはなりません。compiler()
に対するバージョンはコンパイラバージョンです、コンパイラに渡されたSwiftバージョン設定に関係なく。swift()
に対するバージョンは、現在コンパイルされている言語バージョンです。例えば、あなたがSwift 5コンパイラを使ってSwift 4.2モードであなたのコードをコンパイルするならば、コンパイラバージョンは5で、言語バージョンは4.2です。それらの設定で、以下のコードは3つのメッセージすべてを出力します:
- #if compiler(>=5)
- print("Compiled with the Swift 5 compiler or later")
- #endif
- #if swift(>=4.2)
- print("Compiled in Swift 4.2 mode or later")
- #endif
- #if compiler(>=5) && swift(<5)
- print("Compiled with the Swift 5 compiler or later in a Swift mode earlier than 5")
- #endif
- // Prints "Compiled with the Swift 5 compiler or later"
- // Prints "Compiled in Swift 4.2 mode or later"
- // Prints "Compiled with the Swift 5 compiler or later in a Swift mode earlier than 5"
The argument for the canImport()
platform condition is the name of a module that may not be present on all platforms. This condition tests whether it’s possible to import the module, but doesn’t actually import it. If the module is present, the platform condition returns true
; otherwise, it returns false
.
canImport()
プラットホーム条件に対する引数は、全てのプラットホームには含まれないかもしれないあるモジュールの名前です。この条件は、そのモジュールがインポート可能であるかどうかをテストします、しかし実際にそれをインポートはしません。そのモジュールが存在するならば、プラットホーム条件はtrue
を返します;そうでなければ、それはfalse
を返します。
The targetEnvironment()
platform condition returns true
when code is being compiled for the specified environment; otherwise, it returns false
.
targetEnvironment()
プラットホーム条件は、指定された環境に対してコードがコンパイルされている場合はtrue
を返します;そうでなければ、それはfalse
を返します。
Note 注意
The arch(arm)
platform condition doesn’t return true
for ARM 64 devices. The arch(i386)
platform condition returns true
when code is compiled for the 32–bit iOS simulator.
arch(arm)
プラットホーム条件は、ARM 64機器に対してtrue
を返しません。arch(i386)
プラットホーム条件は、コードが32ビットiOSシミュレーターに対してコンパイルされるときtrue
を返します。
You can combine and negate compilation conditions using the logical operators &&
, ||
, and !
and use parentheses for grouping. These operators have the same associativity and precedence as the logical operators that are used to combine ordinary Boolean expressions.
あなたは、コンパイル条件を結合および否定することが論理演算子&&
、||
、そして!
を使って可能です、そして丸括弧をグループにするのに使うことができます。これらの演算子は、普通のブール式を組み合わせるのに使われる論理演算子と同じ結合性と優先順位を持ちます。
Similar to an if
statement, you can add multiple conditional branches to test for different compilation conditions. You can add any number of additional branches using #elseif
clauses. You can also add a final additional branch using an #else
clause. Conditional compilation blocks that contain multiple branches have the following form:
if
文と同様に、あなたは複数の条件分岐を加えて、異なるコンパイル条件に対してテストすることができます。あなたは、任意の数の追加の分岐を加えることが#elseif
を使って行えます。あなたはまた、最後の追加の分岐を#else
節を使って加えることができます。複数の分岐を含む条件コンパイルブロックは、以下の形式を持ちます:
- #if compilation condition 1
- statements to compile if compilation condition 1 is true
- #elseif compilation condition 2
- statements to compile if compilation condition 2 is true
- #else
- statements to compile if both compilation conditions are false
- #endif
Note 注意
Each statement in the body of a conditional compilation block is parsed even if it’s not compiled. However, there’s an exception if the compilation condition includes a swift()
or compiler()
platform condition: The statements are parsed only if the language or compiler version matches what is specified in the platform condition. This exception ensures that an older compiler doesn’t attempt to parse syntax introduced in a newer version of Swift.
条件コンパイルブロックの本文中の各文は、たとえそれがコンパイルされなくとも、構文解析されます。しかしながら、例外があります、それはコンパイル条件がswift()
またはcompiler()
プラットホーム条件を含む場合です:文が構文解析されるのは、言語またはコンパイラのバージョンがプラットホーム条件において指定されるものと合致する場合にのみです。この例外は、古いコンパイラがより新しいバージョンのスウィフトで導入される構文の解析を試みないことを確実にします。
For information about how you can wrap explicit member expressions in conditional compilation blocks, see Explicit Member Expression. どのようにあなたが明示的メンバー式を条件コンパイルブロックの中にラップできるかについての情報として、明示的メンバー式を見てください。
Grammar of a conditional compilation block 条件コンパイルブロックの文法
conditional-compilation-block → if-directive-clause elseif-directive-clauses opt else-directive-clause opt endif-directive
if-directive-clause → if-directive compilation-condition statements opt
elseif-directive-clauses → elseif-directive-clause elseif-directive-clauses opt
elseif-directive-clause → elseif-directive compilation-condition statements opt
else-directive-clause → else-directive statements opt
compilation-condition → platform-condition
compilation-condition → identifier
compilation-condition → boolean-literal
compilation-condition → (
compilation-condition )
compilation-condition → !
compilation-condition
compilation-condition → compilation-condition &&
compilation-condition
compilation-condition → compilation-condition ||
compilation-condition
platform-condition → os
(
operating-system )
platform-condition → arch
(
architecture )
platform-condition → swift
(
>=
swift-version )
| swift
(
<
swift-version )
platform-condition → compiler
(
>=
swift-version )
| compiler
(
<
swift-version )
platform-condition → canImport
(
module-name )
platform-condition → targetEnvironment
(
environment )
operating-system → macOS
| iOS
| watchOS
| tvOS
| Linux
| Windows
architecture → i386
| x86_64
| arm
| arm64
swift-version → decimal-digits swift-version-continuation opt
swift-version-continuation → .
decimal-digits swift-version-continuation opt
module-name → identifier
Line Control Statement¶ 行制御文¶
A line control statement is used to specify a line number and filename that can be different from the line number and filename of the source code being compiled. Use a line control statement to change the source code location used by Swift for diagnostic and debugging purposes. 行制御文は、ある行番号とファイル名を指定するために使われます、それはコンパイルされているソースコードの行番号とファイル名とは異なっていることが可能です。行制御文を使ってスウィフトによって使われるソースコード位置を診断上のそしてデバッグの目的で変更してください。
A line control statement has the following forms: 行制御文は以下の形式を持ちます:
- #sourceLocation(file: file path, line: line number)
- #sourceLocation()
The first form of a line control statement changes the values of the #line
, #file
, #fileID
, and #filePath
literal expressions, beginning with the line of code following the line control statement. The line number changes the value of #line
, and is any integer literal greater than zero. The file path changes the value of #file
, #fileID
, and #filePath
, and is a string literal. The specified string becomes the value of #filePath
, and the last path component of the string is used by the value of #fileID
. For information about #file
, #fileID
, and #filePath
, see Literal Expression.
最初の形式の行制御文は、#line
、#file
、#fileID
、そして#filePath
リテラル式の値を変更して、行制御文の後に続くコードの行で始めます。line number(行番号)は、#line
の値を変更します、そして0より大きい何らかの整数リテラルです。filename(ファイル名)は、#file
、#fileID
、そして#filePath
の値を変更します、そしてひとつの文字列リテラルです。指定された文字列は、#filePath
の値になります、そして文字列の最後のパス構成要素は#fileID
の値によって使われます。#file
、#fileID
、そして#filePath
についての情報として、リテラル式を見てください。
The second form of a line control statement, #sourceLocation()
, resets the source code location back to the default line numbering and file path.
行制御文の2番目の形式、#sourceLocation()
はソースコード位置を再設定して、初期状態の行番号振りとファイルパスに戻します。
Grammar of a line control statement 行制御文の文法
line-control-statement → #sourceLocation
(
file:
file-path ,
line:
line-number )
line-control-statement → #sourceLocation
(
)
line-number → A decimal integer greater than zero 0より大きい10進法整数
file-path → static-string-literal
Compile-Time Diagnostic Statement¶ コンパイル時診断文¶
A compile-time diagnostic statement causes the compiler to emit an error or a warning during compilation. A compile-time diagnostic statement has the following forms: コンパイル時診断文は、コンパイラにエラーまたは警告をコンパイルの間に発せさせます。コンパイル時診断文は、以下の形式を持ちます:
- #error("error message")
- #warning("warning message")
The first form emits the error message as a fatal error and terminates the compilation process. The second form emits the warning message as a nonfatal warning and allows compilation to proceed. You write the diagnostic message as a static string literal. Static string literals can’t use features like string interpolation or concatenation, but they can use the multiline string literal syntax. 最初の形式は、error message(エラーメッセージ)を致命的エラーとして発して、コンパイル処理を終わらせます。2番目の形式は、warning message(警告メッセージ)を致命的でない警告として発して、コンパイルの続行を許します。あなたは、診断メッセージを静的文字列リテラルとして書きます。静的文字列リテラルは、文字列補間や連結のような機能を使えません、しかしそれらは複数行文字列リテラル構文を使えます。
Grammar of a compile-time diagnostic statement コンパイル時診断文の文法
diagnostic-statement → #error
(
diagnostic-message )
diagnostic-statement → #warning
(
diagnostic-message )
diagnostic-message → static-string-literal
Availability Condition¶ 有効性条件¶
An availability condition is used as a condition of an if
, while
, and guard
statement to query the availability of APIs at runtime, based on specified platforms arguments.
有効性条件は、if
、while
、そしてguard
文の条件として使われて、APIの有効性を実行時に、指定されたプラットホーム引数に基づいて問いただします。
An availability condition has the following form: 有効性条件は以下の形式を持ちます:
- if #available(platform name version, ..., *) {
- statements to execute if the APIs are available
- } else {
- fallback statements to execute if the APIs are unavailable
- }
You use an availability condition to execute a block of code, depending on whether the APIs you want to use are available at runtime. The compiler uses the information from the availability condition when it verifies that the APIs in that block of code are available. あなたは、有効性条件を使って、あなたが使用したいAPIが実行時に有効かどうかに基づいて、あるコードのブロックを実行します。コンパイラは、有効性条件からの情報を、それがそのブロックの中のAPIが利用可能であることを確かめる時に使います。
The availability condition takes a comma-separated list of platform names and versions. Use iOS
, macOS
, watchOS
, and tvOS
for the platform names, and include the corresponding version numbers. The *
argument is required and specifies that on any other platform, the body of the code block guarded by the availability condition executes on the minimum deployment target specified by your target.
有効性条件は、プラットホーム名とバージョンのコンマ区切りのリストを取ります。プラットホーム名としてiOS
、macOS
、watchOS
、そしてtvOS
を、付随するバージョン番号を含めて使ってください。*
引数は必須であらゆる他のプラットホーム上を指定します、有効性条件によって保護されたコード・ブロックの本文はあなたのターゲットによって指定される最小の開発ターゲット上で実行します。
Unlike Boolean conditions, you can’t combine availability conditions using logical operators such as &&
and ||
.
ブール条件と違って、あなたは論理演算子例えば&&
や||
などを使って有効性条件を連結することはできません。
Grammar of an availability condition 有効性条件の文法
availability-condition → #available
(
availability-arguments )
availability-arguments → availability-argument | availability-argument ,
availability-arguments
availability-argument → platform-name platform-version
platform-name → iOS
| iOSApplicationExtension
platform-name → macOS
| macOSApplicationExtension
platform-name → macCatalyst
| macCatalystApplicationExtension
platform-version → decimal-digits
platform-version → decimal-digits .
decimal-digits
platform-version → decimal-digits .
decimal-digits .
decimal-digits