Основи 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 або прототип додатку? Ознайомтеся з нашим портфоліо і зробіть замовлення вже сьогодні!