Ранее мы писали об аннотации типов данных и интерполяции строк, а в этот раз хотим рассказать о массивах в 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 и познакомились с двумя способами их создания:
- С одновременным присвоением значений его элементам.
- С помощью аннотации типов, когда мы указываем, какой тип данных будет храниться в массиве, но сами данные записываем в него уже после его инициализации.
Источник: Hacking with Swift
Читайте далее: Основи Swift. Словники
Нужен MVP, разработка под iOS, Android или прототип приложения? Ознакомьтесь с нашим портфолио и сделайте заказ уже сегодня!