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