Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика XCode

Разработчик

Swift язык программирования

iBook
На этой странице

Образцы

Образец представляет структуру единственного значения или составного значения. Например, структура кортежа (1, 2) список разделенных запятой значений двух элементов. Поскольку образцы представляют структуру значения, а не любого определенного значения, можно соответствовать им множеству значений. Например, образец (x, y) соответствует кортеж (1, 2) и любой другой кортеж с двумя элементами. В дополнение к соответствию образца со значением можно извлечь часть или все составное значение и связать каждую часть с постоянным или именем переменной.

В Swift образцы происходят в объявлениях переменной и объявлениях константы (на их левой стороне), в for-in операторы, и в switch операторы (в их метках случая). Несмотря на то, что любой образец может произойти в метках случая a switch оператор, в других контекстах, только подстановочные образцы, образцы идентификатора и образцы, содержащие те два образца, может произойти.

Можно указать аннотацию типа для подстановочного образца, образца идентификатора и образца кортежа, чтобы ограничить образец соответствовать только значения определенного типа.

Подстановочный образец

Подстановочный образец соответствует и игнорирует любое значение и состоит из подчеркивания (_). Используйте подстановочный образец, когда Вы не будете заботиться о значениях, соответствующих против. Например, следующий код выполняет итерации через закрытый диапазон 1...3, игнорирование текущей стоимости диапазона на каждой итерации цикла:

  • for _ in 1...3 {
  • // Do something three times.
  • }

Грамматика подстановочного образца

подстановочный образец

Образец идентификатора

Образец идентификатора соответствует любое значение и связывает соответствующее значение с переменным или постоянным именем. Например, в следующем объявлении константы, someValue образец идентификатора, соответствующий значение 42 из типа Int:

  • let someValue = 42

Когда соответствие успешно выполняется, значение 42 связывается (присвоенный) постоянному имени someValue.

Когда образец на левой стороне объявления переменной или объявления константы является образцом идентификатора, образец идентификатора является неявно подобразцом связывающего значение образца.

Грамматика образца идентификатора

образец идентификатора идентификатор -

Связывающий значение образец

Связывающий значение образец связывает соответствующие значения с переменными или постоянными именами. Связывающие значение образцы, связывающие соответствующее значение с именем константы, начинаются с ключевого слова let; те, которые связывают с именем переменной, начинают с ключевого слова var.

Образцы идентификаторов в связывающем значение образце связывают новые именованные переменные или константы к их совпадающим значениям. Например, можно анализировать элементы кортежа и связать значение каждого элемента к соответствующему образцу идентификатора.

  • let point = (3, 2)
  • switch point {
  • // Bind x and y to the elements of point.
  • case let (x, y):
  • println("The point is at (\(x), \(y)).")
  • }
  • // prints "The point is at (3, 2)."

В примере выше, let распределяет каждому образцу идентификатора в образце кортежа (x, y). Из-за этого поведения, switch случаи case let (x, y): и case (let x, let y): соответствуйте те же значения.

Грамматика связывающего значение образца

обязательный образец значения var­образец - let­образец -

Образец кортежа

Образец кортежа является списком разделенных запятой значений нуля или большего количества образцов, включенных в круглые скобки. Образцы кортежа соответствуют значения соответствующих типов «кортеж».

Можно ограничить образец кортежа соответствовать определенные виды типов «кортеж» при помощи аннотаций типа. Например, образец кортежа (x, y): (Int, Int) в объявлении константы let (x, y): (Int, Int) = (1, 2) соответствия только типы «кортеж», в которых оба элемента имеют тип Int. Для ограничения только некоторых элементов образца кортежа обеспечьте аннотации типа непосредственно для тех отдельных элементов. Например, образец кортежа в let (x: String, y) соответствия любой тип «кортеж» с двумя элементами, пока первый элемент имеет тип String.

Когда образец кортежа используется в качестве образца в a for-in оператор или в объявлении переменной или объявлении константы, это может содержать только подстановочные образцы, образцы идентификатора или другие образцы кортежа, содержащие тех. Например, следующий код не допустим потому что элемент 0 в образце кортежа (x, 0) характер экспрессии:

  • let points = [(0, 0), (1, 0), (1, 1), (2, 0), (2, 1)]
  • // This code isn't valid.
  • for (x, 0) in points {
  • /* ... */
  • }

Круглые скобки вокруг образца кортежа, содержащего единственный элемент, не имеют никакого эффекта. Образец соответствует значения типа того единственного элемента. Например, следующее эквивалентны:

  • let a = 2 // a: Int = 2
  • let (a) = 2 // a: Int = 2
  • let (a): Int = 2 // a: Int = 2

Грамматика образца кортежа

образец кортежа «список элемента рисунка кортежа выбирает»

элемент образца кортежа перечисляет элемент рисунка кортежа - элемент рисунка кортежа -«список элемента рисунка кортежа»

элемент рисунка кортежа образец -

Образец случая перечисления

Образец случая перечисления соответствует случай существующего типа перечисления. Образцы случая перечисления появляются только в switch метки случая оператора.

Если случай перечисления, который Вы пытаетесь соответствовать, имеет какие-либо присваиваемые значения, соответствующий образец случая перечисления должен указать образец кортежа, содержащий один элемент для каждого присваиваемого значения. Для примера, использующего a switch оператор для соответствия случаев перечисления, содержащих присваиваемые значения, посмотрите Присваиваемые значения.

Грамматика образца случая перечисления

перечислимый образец случая «идентификатор типа выбирает»«перечислимый образец кортежа имени случая выбирает»

Преобразование типа образцов

Существует два образца преобразования типа, is образец и as образец. Оба образца преобразования типа появляются только в switch метки случая оператора. is и as образцы имеют следующую форму:

  • is type
  • pattern as type

is если тип того значения во время выполнения совпадает с типом, указанным в правой стороне, образец соответствует значение is образец — или подкласс того типа. is образец ведет себя как is оператор в этом они оба выполняют бросок типа, но отбрасывают возвращенный тип.

as если тип того значения во время выполнения совпадает с типом, указанным в правой стороне, образец соответствует значение as образец — или подкласс того типа. Если соответствие успешно выполняется, тип соответствующего значения брошен к образцу, указанному в левой стороне as образец.

Для примера, использующего a switch оператор для соответствия значений is и as образцы, посмотрите Преобразование типа для Любого и AnyObject.

Грамматика образца преобразования типа

образец преобразования типа -образец - поскольку-образец -

-образец is­введите -

поскольку-образец образец -as­введите -

Характер экспрессии

Характер экспрессии представляет значение выражения. Характер экспрессии появляется только в switch метки случая оператора.

Выражение, представленное характером экспрессии, по сравнению со значением входного выражения, пользующегося библиотекой стандарта Swift ~= оператор. Соответствия успешно выполняются если ~= оператор возвращается true. По умолчанию, ~= оператор сравнивает два значения того же типа с помощью == оператор. Это может также соответствовать целочисленное значение диапазону целых чисел в Range объект, поскольку следующий пример показывает:

  • let point = (1, 2)
  • switch point {
  • case (0, 0):
  • println("(0, 0) is at the origin.")
  • case (-2...2, -2...2):
  • println("(\(point.0), \(point.1)) is near the origin.")
  • default:
  • println("The point is at (\(point.0), \(point.1)).")
  • }
  • // prints "(1, 2) is near the origin."

Можно перегрузиться ~= оператор для обеспечения пользовательского поведения при сравнении выражения. Например, можно переписать вышеупомянутый пример для сравнения point выражение со строковые представления точек.

  • // Overload the ~= operator to match a string with an integer
  • func ~=(pattern: String, value: Int) -> Bool {
  • return pattern == "\(value)"
  • }
  • switch point {
  • case ("0", "0"):
  • println("(0, 0) is at the origin.")
  • default:
  • println("The point is at (\(point.0), \(point.1)).")
  • }
  • // prints "The point is at (1, 2)."

Грамматика характера экспрессии

характер экспрессии выражение -