Операторы
В Swift существует два вида операторов: простые операторы и операторы управления. Простые операторы наиболее распространены и состоят или из выражения или из объявления. Операторы управления используются для управления потоком выполнения в программе. Существует три типа операторов управления в Swift: инструкции циклов, операторы ветвления, и проверяют утверждения передачи.
Инструкции циклов позволяют блоку кода неоднократно выполняться, операторы ветвления позволяют определенному блоку кода выполняться только, когда определенные условия соблюдены и проверяют утверждения передачи, обеспечивают способ изменить порядок, в котором выполняется код. Каждый тип оператора управления описан подробно ниже.
Точка с запятой (;
) может дополнительно появиться после любого оператора и используется для разделения многократных операторов, если они появляются на той же строке.
Грамматика оператора
оператор
→ выражение -;
выберите -
оператор
→ объявление -;
выберите -
оператор
→ оператор цикла -;
выберите -
оператор
→ оператор ответвления -;
выберите -
оператор
→ маркированный оператор -;
выберите -
оператор
→ оператор передачи управления -;
выберите -
операторы → «операторы оператора выбирают»
Инструкции циклов
Инструкции циклов позволяют блоку кода неоднократно выполняться, в зависимости от условий, указанных в цикле. Swift имеет четыре инструкции циклов: a for
оператор, a for
-in
оператор, a while
оператор и a do
-while
оператор.
Поток управления в инструкции циклов может быть изменен a break
оператор и a continue
оператор и обсужден в Операторе завершения, и Продолжайте Оператор ниже.
Грамматика инструкции циклов
инструкция циклов → для оператора -
инструкция циклов → для в операторе -
инструкция циклов → в-то-время-как-оператор -
инструкция циклов → «делает в то время как оператор»
Для оператора
A for
оператор позволяет блоку кода неоднократно выполняться при постепенном увеличении счетчика, поскольку долго в качестве одного из условий остается истиной.
A for
оператор имеет следующую форму:
for initialization; condition; increment {
statements
}
Точки с запятой между инициализацией, условием и инкрементом требуются. Фигурные скобки вокруг операторов в организации цикла также требуются.
A for
оператор выполняется следующим образом:
Инициализация оценена только один раз. Это обычно используется, чтобы объявить и инициализировать любые переменные, которые необходимы для остатка от цикла.
Выражение условия оценено.
Если
true
, программа выполняет операторы, и выполнение продолжается к шагу 3. Еслиfalse
, программа не выполняет операторы или инкрементное выражение, и программа закончена, выполнившисьfor
оператор.Инкрементное выражение оценено, и выполнение возвращается к шагу 2.
Переменные, определенные в инициализации, допустимы только в рамках for
сам оператор.
Значение выражения условия должно иметь тип, соответствующий BooleanType
протокол.
Грамматика для оператора
→ для оператора for
for-init-opt-;
«выражение выбирает»;
«выражение выбирает блок кода»
→ для оператора for
(
for-init-opt-;
«выражение выбирает»;
«выражение выбирает»)
блок кода -
для - init → переменное объявление - список выражения -
Для - в операторе
A for
-in
оператор позволяет блоку кода выполняться один раз для каждого элемента в наборе (или любой тип), который соответствует SequenceType
протокол.
A for
-in
оператор имеет следующую форму:
for item in collection {
statements
}
generate()
метод вызывают по выражению набора для получения значения типа генератора — т.е. тип, соответствующий GeneratorType
протокол. Программа начинает выполнять цикл путем вызова next()
метод на потоке. Если значение возвратилось, не None
, это присваивается образцу элемента, программа выполняет операторы, и затем продолжает выполнение в начале цикла. Иначе, программа не выполняет присвоение или выполняет операторы, и это закончено, выполнившись for
-in
оператор.
Грамматика для - в операторе
для в операторе
→ for
образец -in
блок кода выражения -
В то время как оператор
A while
оператор позволяет блоку кода неоднократно выполняться, поскольку долго в качестве одного из условий остается истиной.
A while
оператор имеет следующую форму:
while condition {
statements
}
A while
оператор выполняется следующим образом:
Условие оценено.
Если
true
, выполнение продолжается к шагу 2. Еслиfalse
, программа закончена, выполнившисьwhile
оператор.Программа выполняет операторы, и выполнение возвращается к шагу 1.
Поскольку значение условия оценено, прежде чем операторы выполняются, операторы в a while
оператор может быть выполнен нуль или больше раз.
Значение условия должно иметь тип, соответствующий BooleanType
протокол. Условие может также быть дополнительным обязательным объявлением, как обсуждено в Дополнительной Привязке.
Грамматика некоторое время оператора
в-то-время-как-оператор
→ while
«в то время как блок кода условия»
в-то-время-как-условие → выражение - «выражение выбирает дополнительный обязательный список»
дополнительный обязательный список
→
дополнительный обязательный пункт -
дополнительный обязательный пункт -,
дополнительный обязательный список -
дополнительный обязательный пункт → «дополнительный обязательный главный дополнительный обязательный список продолжения выбирает, защитный пункт выбирает»
дополнительная обязательная голова
→
let
инициализатор образца идентификатора -
var
инициализатор образца идентификатора -
дополнительное обязательное продолжение перечисляет
→
дополнительное обязательное продолжение -
дополнительное обязательное продолжение -,
«дополнительный обязательный список продолжения»
дополнительное обязательное продолжение → инициализатор образца идентификатора - дополнительная обязательная голова -
Сделайте - в то время как оператор
A do
-while
оператор позволяет блоку кода выполняться один или несколько раз, поскольку долго в качестве одного из условий остается истиной.
A do
-while
оператор имеет следующую форму:
do {
statements
} while condition
A do
-while
оператор выполняется следующим образом:
Программа выполняет операторы, и выполнение продолжается к шагу 2.
Условие оценено.
Если
true
, выполнение возвращается к шагу 1. Еслиfalse
, программа закончена, выполнившисьdo
-while
оператор.
Поскольку значение условия оценено после того, как операторы выполняются, операторы в a do
-while
оператор выполняется, по крайней мере, один раз.
Значение условия должно иметь тип, соответствующий BooleanType
протокол. Условие может также быть дополнительным обязательным объявлением, как обсуждено в Дополнительной Привязке.
Операторы ветвления
Операторы ветвления позволяют программе выполнять определенные части кода в зависимости от значения одного или более условий. Значения условий указали в управлении оператором ветвления, как программа переходит и, поэтому, какой блок кода выполняется. Swift имеет два оператора ветвления: if
оператор и a switch
оператор.
Поток управления в a switch
оператор может быть изменен a break
оператор и обсужден в Операторе завершения ниже.
Грамматика оператора ветвления
оператор ветвления → если-оператор -
оператор ветвления → оператор переключателя -
Если оператор
if
оператор используется для выполнения кода на основе оценки одного или более условий.
Существует две канонических формы if
оператор. В каждой форме требуются открытие и закрывающие фигурные скобки.
Первая форма позволяет коду выполняться только, когда условие является истиной и имеет следующую форму:
if condition {
statements
}
Вторая форма if
оператор обеспечивает дополнительное выражение else (представленный else
ключевое слово), и используется для выполнения одной части кода, когда условие является истиной и другой частью кода, когда то же условие является ложью. Когда единственное выражение else присутствует, if
оператор имеет следующую форму:
if condition {
statements to execute if condition is true
} else {
statements to execute if condition is false
}
Выражение else if
оператор может содержать другого 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
}
Значение любого условия в if
оператор должен иметь тип, соответствующий BooleanType
протокол. Условие может также быть дополнительным обязательным объявлением, как обсуждено в Дополнительной Привязке.
Грамматика, если оператор
оператор «if»
→ if
«если выбирает блочное выражение else кода условия»
если-условие → выражение - «выражение выбирает дополнительный обязательный список»
выражение else
→
else
блок кода -
else
если-оператор -
Оператор переключения
A switch
оператор позволяет определенным блокам кода выполняться в зависимости от значения выражения управления.
A 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
}
Выражение управления switch
оператор оценен и затем по сравнению с образцами, указанными в каждом случае. Если соответствие найдено, программа выполняет операторы, перечисленные в рамках того случая. Объем каждого случая не может быть пустым. В результате необходимо включать по крайней мере один оператор после двоеточия (:
) из каждой метки случая. Используйте сингл break
оператор, если Вы не намереваетесь выполнить какой-либо код в организации соответствующего случая.
Значения выражений, на которых может перейти Ваш код, очень гибки. Например, в дополнение к значениям скалярных типов, таким как целые числа и символы, Ваш код может перейти на значениях любого типа, включая числа с плавающей точкой, строки, кортежи, экземпляры пользовательских классов и optionals. Значение выражения управления может даже быть соответствующим к значению случая в перечислении и проверено на включение в указанный диапазон значений. Для примеров того, как использовать эти различные типы значений в switch
операторы, посмотрите Переключатель в главе Потока управления.
A switch
случай может дополнительно содержать защитное выражение после каждого образца. Защитное выражение представлено ключевым словом where
сопровождаемый выражением, и используется для обеспечения дополнительного условия, прежде чем образец в случае будут считать соответствующим к выражению управления. Если защитное выражение присутствует, операторы в соответствующем случае выполняются, только если значение выражения управления соответствует один из образцов случая, и защитное выражение оценивает к true
. Например, выражение управления соответствует случай в примере ниже, только если это - кортеж, содержащий два элемента того же значения, такой как (1, 1)
.
case let (x, y) where x == y:
Поскольку вышеупомянутый пример показывает, образцы в случае могут также связать константы с помощью ключевого слова let
(они могут также связать переменные с помощью ключевого слова var
). На эти константы (или переменные) можно тогда сослаться в соответствующем защитном выражении и всюду по остальной части кода в рамках случая. Однако если случай содержит многократные образцы, соответствующие выражение управления, ни один из тех образцов не может содержать постоянные или привязки переменных.
A switch
оператор может также включать случай по умолчанию, представленный ключевым словом default
. Код в случае по умолчанию выполняется, только если никакие другие случаи не соответствуют выражение управления. A switch
оператор может включать только один случай по умолчанию, который должен появиться в конце switch
оператор.
Несмотря на то, что фактический порядок выполнения операций сопоставления с образцом, и в частности порядок оценки образцов в случаях, являются неуказанным, сопоставлением с образцом в a switch
оператор ведет себя, как будто оценка выполняется в исходном порядке — т.е. порядке, в котором они появляются в исходном коде. В результате, если многократные случаи содержат образцы, которые оценивают к тому же значению, и таким образом могут соответствовать значение выражения управления, программа выполняет только код в первом случае соответствия в исходном порядке.
Операторы переключения должны быть исчерпывающими
В Swift каждое возможное значение типа выражения управления должно соответствовать значение по крайней мере одного образца случая. Когда это просто не выполнимо (например, когда тип выражения управления Int
), можно включать случай по умолчанию для удовлетворения требования.
Выполнение не проваливается случаи неявно
После того, как код в соответствующем случае закончил выполняться, выходы программы от switch
оператор. Реализация программы не продолжается или «проваливается» к следующему случаю или случаю по умолчанию. Однако если Вы хотите, чтобы выполнение продолжалось от одного случая до следующего, явно включайте a fallthrough
оператор, просто состоящий из ключевого слова fallthrough
, в случае, от которого Вы хотите, чтобы продолжалось выполнение. Для получения дополнительной информации о fallthrough
оператор, см. Оператор Fallthrough ниже.
Грамматика оператора переключения
оператор переключения
→ switch
выражение -{
«случаи переключателя выбирают»}
случаи переключателя → «случаи переключателя случая переключателя выбирают»
случай переключателя → операторы метки случая - операторы метки по умолчанию -
случай переключателя
→
метка случая -;
метка по умолчанию -;
метка случая
→ case
список элемента случая -:
список элемента случая
→
«защитный пункт образца выбирает» «защитный пункт образца, выбирают»
,
список элемента случая -
защитный пункт
→ where
защитное выражение -
защитное выражение → выражение -
Помеченный оператор
Можно снабдить префиксом инструкцию циклов или a switch
оператор с меткой оператора, состоящей из имени метки, сопровождаемой сразу двоеточием (:). Используйте метки оператора с break
и continue
операторы, чтобы быть явным о том, как Вы хотите к потоку контроля изменений в инструкции циклов или a switch
оператор, как обсуждено в Операторе завершения и Продолжает Оператор ниже.
Объем помеченного оператора является всем оператором после метки оператора. Можно вложить помеченные операторы, но имя каждой метки оператора должно быть уникальным.
Для получения дополнительной информации и видеть примеры того, как использовать метки оператора, посмотрите Помеченные операторы в главе Потока управления.
Грамматика помеченного оператора
помеченный оператор → инструкция циклов метки оператора - оператор переключения метки оператора -
метка оператора
→ имя метки -:
имя метки → идентификатор -
Проверьте утверждения передачи
Проверьте утверждения передачи, может изменить порядок, в котором код в Вашей программе выполняется путем безусловной передачи программного управления от одной части кода другому. Swift имеет четыре, проверяют утверждения передачи: a break
оператор, a continue
оператор, a fallthrough
оператор и a return
оператор.
Грамматика управления передает оператор
оператор передачи управления → оператор повреждения -
оператор передачи управления → продолжать-оператор -
оператор передачи управления → fallthrough-оператор -
оператор передачи управления → оператор возврата -
Оператор завершения
A break
оператор заканчивает реализацию программы цикла или a switch
оператор. A break
оператор может состоять из только ключевого слова break
, или это может состоять из ключевого слова break
сопровождаемый именем метки оператора, как показано ниже.
break
break label name
Когда a break
оператор сопровождается именем метки оператора, это заканчивает реализацию программы цикла или switch
оператор называет та метка.
Когда a break
оператор не сопровождается именем метки оператора, это заканчивает реализацию программы switch
оператор или самая внутренняя инструкция циклов включения, в которой это происходит.
В обоих случаях программное управление тогда передается первой строке кода после цикла включения или switch
оператор, если таковые имеются.
Для примеров того, как использовать a break
оператор, посмотрите Операторы завершения и Помеченные операторы в главе Потока управления.
Грамматика оператора завершения
оператор завершения
→ break
«имя метки выбирает»
Продолжайте оператор
A continue
оператор заканчивает реализацию программы текущей итерации инструкции циклов, но не останавливает выполнение инструкции циклов. A continue
оператор может состоять из только ключевого слова continue
, или это может состоять из ключевого слова continue
сопровождаемый именем метки оператора, как показано ниже.
continue
continue label name
Когда a continue
оператор сопровождается именем метки оператора, это заканчивает реализацию программы текущей итерации инструкции циклов, названной той меткой.
Когда a continue
оператор не сопровождается именем метки оператора, это заканчивает реализацию программы текущей итерации самой внутренней инструкции циклов включения, в которой это происходит.
В обоих случаях программное управление тогда передается условию инструкции циклов включения.
В a for
оператор, инкрементное выражение все еще оценено после continue
оператор выполняется, потому что инкрементное выражение оценено после выполнения организации цикла.
Для примеров того, как использовать a continue
оператор, посмотрите, Продолжаются и Помеченные операторы в главе Потока управления.
Грамматика продолжать оператора
продолжать-оператор
→ continue
«имя метки выбирает»
Оператор Fallthrough
A fallthrough
оператор состоит из fallthrough
ключевое слово и происходит только в блоке случая a switch
оператор. A fallthrough
оператор заставляет реализацию программы продолжаться от одного случая в a switch
оператор к следующему случаю. Даже если образцы метки случая не соответствуют значение, реализация программы продолжается к следующему случаю switch
выражение управления оператора.
A fallthrough
оператор может появиться где угодно внутри a switch
оператор, не так же, как последний оператор блока случая, но это не может использоваться в заключительном блоке случая. Это также не может передать управление в блок случая, образец которого содержит значение обязательные образцы.
Для примера того, как использовать a fallthrough
оператор в a switch
оператор, посмотрите, Проверяют Утверждения Передачи в главе Потока управления.
Оператор возврата
A return
оператор происходит в организации функции или определения метода и заставляет реализацию программы возвращаться к функции вызова или методу. Реализация программы сразу продолжается в точке после вызова функции или вызова метода.
A return
оператор может состоять из только ключевого слова return
, или это может состоять из ключевого слова return
сопровождаемый выражением, как показано ниже.
return
return expression
Когда a return
оператор сопровождается выражением, значение выражения возвращается к функции вызова или методу. Если значение выражения не соответствует значение типа возврата, объявленного в объявлении функции или объявлении метода, значение выражения преобразовывается в тип возврата, прежде чем это будет возвращено к функции вызова или методу.
Когда a return
оператор не сопровождается выражением, он может использоваться только для возврата из функции или метода, не возвращающего значение (т.е. когда тип возврата функции или метода Void
или ()
).
Грамматика оператора возврата
оператор возврата
→ return
«выражение выбирает»