1. Змінні й коробки
Змінні — це спеціальні засоби для зберігання даних, будь-яких даних. У Swift дані в застосунку зберігаються за допомогою змінних і констант. Змінна за змістом найбільше нагадує коробку: звичайнісіньку коробку.
Припустімо, ви написали на аркуші число 13 і поклали цей аркуш у коробку. Тепер можна сказати, що «коробка зберігає значення 13».
У змінної й у константи в Swift є три важливі властивості: тип, імʼя і значення.
Імʼя потрібне, щоб відрізняти одну змінну від іншої. Це як напис на коробці.
Тип змінної визначає, які значення або дані можна в ній зберігати. У коробці для торта зберігають торт, у коробці для взуття — туфлі тощо.
Значення — це певний об’єкт, дані або інформація, що зберігається у змінній.
Кожне значення (і кожен об’єкт) у мові Swift має свій тип. Наприклад, можуть бути такі типи даних: ціле число, дробове число, текст, тип Cat, тип House тощо.
У кожної змінної (коробки) теж є свій тип. Змінна може зберігати лише значення того самого типу, що й вона сама. Різні коробки використовують для різних речей: коробка цукерок, коробка для десятка яєць тощо. Усе як у житті.
2. Створення змінної
У Swift для того, щоб створити змінну, найчастіше використовують таку конструкцію:
var імʼя: Тип
Де Тип — це тип змінної. Він збігається з типом значень, які змінна зможе зберігати. А імʼя — це назва змінної.
Приклади:
| Створення змінної: var, а далі імʼя і тип. | Опис |
|---|---|
|
Створюємо змінну на імʼя a типу Int. |
|
Створюємо змінну на імʼя s типу String. |
|
Створюємо змінну на імʼя c типу Double. |
Константи
Також у Swift часто використовують змінні, значення яких можна присвоїти лише один раз. Їх оголошують за допомогою let:
let імʼя: Тип = Значення
Такий код зручно читати: ви один раз бачите значення й далі тримаєте його в голові.
Фактично, використовуючи let, ви створюєте константу — значення не можна змінити після присвоєння:
let appName : String = "SuperApp"
appName = "MegaApp" // ❌ Помилка: значення не можна змінити
Якщо значення має змінюватися, використовуйте ключове слово var.
Два найуживаніші типи — це цілі числа (позначаються словом Int) і текст (позначається словом String). Також популярний тип Double — це дробові, тобто дійсні, числа.
3. Присвоєння
Як зазначалося вище, у змінної є імʼя, тип і значення. Імʼя та тип ми вже розібрали, а що щодо значення? Як записати значення в змінну?
Щоб записати значення в змінну, існує спеціальна операція — операція присвоєння. Вона копіює значення з однієї змінної в іншу. Не переносить, а саме копіює. Немов файл на диску. Виглядає це присвоєння так:
імʼя = значення
Де імʼя — це назва змінної, а значення — те, що записують у змінну. Це може бути конкретне значення, імʼя іншої змінної або навіть вираз із використанням змінних.
Приклади:
var i: Int // Створюємо змінну i
var a, b: Int // Створюємо змінні a, b
var x: Int // Створюємо змінну x
i = 3 // У змінну i записується значення 3.
a = 1 // У змінну a записується значення 1.
b = a + 1 // У змінну b записується значення 2.
x = 3 // У змінну x записується значення 3.
x = x + 1 // У цьому рядку значення x збільшується на 1, x тепер дорівнює 4.
У Swift змінну потрібно обов’язково ініціалізувати до першого читання, тобто до використання її значення. Оголосити var x: Int можна, але читати x до присвоєння — не можна.
Знак дорівнює
Знак дорівнює = використовують для присвоєння. Це не порівняння і не рівність, а команда, яка копіює значення праворуч від знака в змінну ліворуч. Для порівняння в мові Swift використовують подвійний знак дорівнює ==.
4. Коротке оголошення змінних: виведення типу
У Swift також є зручний спосіб одразу оголосити змінну й присвоїти їй значення. Це дуже просто: ви пишете імʼя змінної, знак дорівнює і значення.
let appName = "SuperApp"
Такий код читається приблизно так: «створи змінну appName і поклади в неї значення "SuperApp"». Тип змінної при цьому визначається автоматично. Swift дивиться на значення праворуч і робить висновок: якщо це рядок, то тип String; якщо число без крапки — Int; якщо число з крапкою — Double тощо.
let appName = "SuperApp"
print("Застосунок:", appName) // Застосунок: SuperApp
У цьому прикладі компілятор Swift сам розуміє, що appName має тип String. Нам не довелося писати тип вручну.
Такий механізм називається виведенням типу (type inference). Він зменшує кількість зайвого коду та робить програми коротшими й легшими для читання.
До речі, цей спосіб працює і для var:
var appName = "SuperApp"
print("Застосунок:", appName) // Застосунок: SuperApp
Пам’ятайте: це саме оголошення змінної. Після створення її тип змінити не можна. Такий код не спрацює:
var appName = "SuperApp"
appName = 123
5. Імʼя змінної: що можна, а що не можна
Ось що вам корисно знати під час створення змінних:
- Імʼя змінної може бути будь-яким (наприклад, temperature, score, userAge).
- Але є обмеження — воно не може починатися з цифри і не може збігатися зі службовими словами Swift (наприклад, не можна назвати змінну if або switch).
- Не може містити спеціальні символи. На практиці в назвах використовують _ (символ $ у Swift вважається зарезервованим для внутрішніх потреб, тож у навчальному коді його не використовуємо).
- У назві важлива різниця між малими та великими літерами (Age і age — різні змінні).
- Зазвичай використовують стиль camelCase: перша буква мала, а далі — кожне слово з великої (userAge, maxScore).
Приклади дозволених назв:
var x123 = 1
var котейка = "Барсик"
let PI = 3.14
let MAIN_PATH = "c:/"
Приклади заборонених назв:
let 1first = 1 // імʼя не може починатися з цифри
let number# = 25 // символ # не можна використовувати в назві
let name" = "John" // лапки в назві неприпустимі
let pi+e = 5.123 // назва не може містити +
Усе інше ви дізнаєтеся в майбутніх лекціях. А тепер — запитання на логіку: за скільки кроків можна спіймати кота в коробку?
6. Коти й коробки
Як спіймати кота:
- Візьміть порожню коробку.
- Чекайте.
Це жарт 🙂
У коробку, можливо, й можна запхати скільки завгодно котів, але в змінну можна покласти лише одне значення. Саме з цим і буде пов’язана наступна задача.
7. Коротка історія Swift
Щоб зрозуміти деякі особливості Swift, корисно трохи повернутися назад — у часи, коли основною мовою розробки для iOS і macOS був Objective-C. Ця мова зʼявилася ще в 1980-х роках і успадкувала багато особливостей C: складний синтаксис, незвичні квадратні дужки для виклику методів і безліч історичних деталей, які з часом ставали дедалі менш зручними для сучасних проєктів.
На початку 2010-х Apple зіткнулася з типовою проблемою зрілих платформ: екосистема була величезною, але мова, якою писали застосунки, поступалася сучаснішим мовам за зручністю та безпекою. Компанія вирішила створити новий інструмент, який було б простіше читати, безпечніше використовувати з памʼяттю та краще пристосувати до можливостей сучасних компіляторів.
Розробка Swift почалася всередині Apple приблизно 2010 року. Мета була доволі практичною: зробити мову, яка прискорює розробку і зменшує кількість помилок, але водночас залишається сумісною з наявними бібліотеками Objective-C. Це дало змогу поступово переходити на нову мову, не переписуючи всю екосистему з нуля.
Swift уперше представили в червні 2014 року на конференції WWDC. Він одразу виглядав значно сучасніше за свого попередника: зрозуміліший синтаксис, автоматичне виведення типів, безпечна робота з Optional-значеннями та суворіша система типів.
Уже в 2015 році Swift став open-source, і мова почала розвиватися швидше: з’явилися нові можливості на кшталт async/await, покращення стандартної бібліотеки та інструменти на кшталт Swift Package Manager. Наразі доступна вже шоста версія мови.
Загалом Swift створювали не просто як «ще одну мову», а як головну мову розробки для всієї платформи Apple. Вона мала бути достатньо простою для початківців і водночас потужною для великих застосунків.
Нам не потрібно вивчати всю історію Swift. Ми писатимемо на сучасному Swift 6 і використовуватимемо його головні ідеї: безпеку типів, читабельний код і мінімальну кількість прихованої магії.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ