Основы Swift. Массивы

Основы Swift. Массивы

Ранее мы писали об аннотации типов данных и интерполяции строк, а в этот раз хотим рассказать о массивах в Swift. Массивы позволяют нам сначала группировать множество значений в одну коллекцию, а затем открывать их по отдельности согласно тех позиций, которые эти значения занимают в коллекции.

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

var oddNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]

Чтобы отметить начало и конец массива Swift использует квадратные скобки. Внутри коллекции элементы отделены друг от друга запятыми.

Отсчет элементов массива всегда начинается с нуля! Это означает, что индекс первого элемента равен 0, второго — 1, третьего — 2 и так далее. Введите в playground следующий код:

var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0]
songs[1]
songs[2]

В области результатов последовательно отобразятся строки «Shake it Off», «You Belong with Me» и «Back to December».

Позиция элемента в массиве называется его индексом. Мы можем прочитать любое значение просто указав его индекс. Однако, при работе с индексами нужно быть предельно внимательным. В нашем случае массив содержит три элемента и для него актуальны индексы 0, 1 и 2. Но при попытке прочитать значение по несуществующему индексу songs[3] код в playground перестанет работать — и это может стать причиной критической ошибки в любом реальном проекте!

Поскольку мы добавили в массив три строки, Swift знает, что это массив строк. Проверить это можно с помощью специальной команды, которая выведет на экран тип данных любой переменной:

var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs.dynamicType

В области результатов отобразится Swift.Array. Это означает, что Swift рассматривает songs как массив строк.

Предположим, что мы совершили ошибку и случайно добавили в массив число:

var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
songs.dynamicType

В этом случает playground выведет на экран Swift.Array.

Важно: если в области результатов выводится сообщение об ошибке «Type of expression is ambiguous» скорее всего в коде была удалена строка с импортом библиотеки UIKit!

Теперь, когда наш массив содержит в себе два типа данных, язык Swift автоматически преобразовал его для хранения данных типа NSObject. Другими словами, в нем можно хранить данные любого типа.

Важной особенностью Swift является соблюдение типобезопастности. Поэтому он пытается сделать наш массив пригодным для хранения данных с разными типами. Но в нашем случае это приведёт к ошибке.

Чтобы предотвратить ее, мы воспользуемся аннотацией типов и укажем, с каким типом данных будет работать наш массив:

var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]

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

Создание массивов в Swift

Выше мы рассмотрели способ создания массива с одновременным присвоением значений его элементам. Однако этот синтаксис не работает в случае, когда нам нужно сохранить значения в массив не в момент его создания, а немного позже:

var songs: [String]
songs[0] = "Shake it Off"

В первой строке мы объявили, что данный массив будет хранить строковые значения. Но сам массив в этот момент не создали — это формальная декларация о намерениях использовать данный массив дальше в коде. Под него пока не выделена память, и Swift не предпринимает никаких действий. Есть несколько способов подобной инициализации. Один из них:

var songs: [String] = []

Здесь применен метод аннотации типов — мы объявили, что массив будет хранить данные с типом string и присвоили ему пустое значение в виде квадратных скобок «[ ]». Кроме того, довольно часто встречается вот такая синтаксическая конструкция:

var songs = [String]()

Этот вариант содержит на два символа меньше, поэтому неудивительно, что большинство программистов предпочитают именно его.

Операторы массивов в Swift

Для работы с массивами используется ограниченный набор операторов. Например, с помощью оператора «+» можно объединить два массива:

var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "White Horse", "Fifteen"]
var both = songs + songs2

Также можно использовать оператор «+=»:

both += ["Everything has Changed"]

Сегодня мы узнали, что представляют из себя массивы в Swift и познакомились с двумя способами их создания:

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

Источник: Hacking with Swift

Читайте далее: Основи Swift. Словники

Нужен MVP, разработка под iOS, Android или прототип приложения? Ознакомьтесь с нашим портфолио и сделайте заказ уже сегодня!