Swift — багатопарадигмова компільована мова програмування, розроблена компанією Apple для того, щоб співіснувати з Objective C і бути стійкішою до помилкового коду. Swift була представлена на конференції розробників WWDC 2014. Мова побудована з LLVM компілятором, включеного у Xcode 6 beta. Безкоштовний посібник мови програмування Swift доступний для завантаження у магазині iBooks.
Swift (мова програмування) | |
---|---|
Парадигма | Багатопарадигмова (, об'єктно-орієнтована, функційна, імперативна, блочно-структурована) |
Дата появи | 2014 |
Творці | та Apple Inc. |
Розробник | Apple Inc. |
Останній реліз | 5(25 березня 2019; 10 місяців назад) (5 грудня 2017 ) |
Система типізації | статична, сувора, вивід типів |
Під впливом від | Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, |
Вплинула на | Rust |
Операційна система | iOS, macOS, watchOS, Linux, tvOS |
Ліцензія | Apache License (починаючи з Swift 2.2), Проприєтарна (до версії Swift 2.2) |
Звичайні розширення файлів | .swift |
Репозиторій вихідного коду | github.com/apple/swift |
Вебсайт | swift.org |
|
Компілятор Swift побудований з використанням технологій вільного проєкту LLVM. Swift успадковує найкращі елементи мов C і Objective-C, тому синтаксис звичний для знайомих з ними розробників, але водночас відрізняється використанням засобів автоматичного розподілу пам'яті і контролю переповнення змінних і масивів, що значно збільшує надійність і безпеку коду.
При цьому Swift-програми компілюються у машинний код, що дозволяє забезпечити високу швидкодію. За заявою Apple, код Swift виконується в 1.3 рази швидше коду на Objective-C. Замість збирача сміття Objective-C в Swift використовуються засоби підрахунку посилань на об'єкти, а також надані у LLVM оптимізації, такі як автовекторизація.
Мова також пропонує низку сучасних методів програмування, таких як замикання, узагальнене програмування, лямбда-вирази, кортежі і словникові типи, швидкі операції над колекціями, елементи функційного програмування. Основним застосуванням Swift є розробка користувацьких застосунків для macOS, iOS, tvOS, watchOS з використанням тулкіта Cocoa і Cocoa Touch. При цьому Swift надає об'єктну модель, сумісну з Objective-C. Сирцевий код мовою Swift може змішуватися з кодом на С і Objective-C в одному проєкті.
Swift щільно інтегровано до власницького середовища розробки Xcode, проте може бути викликано з терміналу, що уможливлює її використання на операційний системах, відмінних від macOS, наприклад, на Linux.
Окремо варто відзначити, що Swift від компанії Apple не варто плутати з досить давно розроблюваною скриптовою мовою Swift, націленої на багатонитеве програмування і поставленого під вільною ліцензією Apache.
Історія
Розробку мови Swift почав у співпраці із багатьма іншими програмістами. Ідеї для Swift запозичені із таких мов програмування як «Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, та багатьох інших із списку». 2 червня 2014 року на Всесвітній конференції розробників вперше офіційно було представлено додаток, написаний мовою Swift. Бета версія мови стала доступна для зареєстрованих розробників на сайті компанії, але в Apple не гарантували, що представлена версія буде сумісна із фінальною версією.
Також було представлено безплатний посібник по використанню Swift, обсягом 500 сторінок, на сервісі IBooks.
Версія Swift 1.0 була випущена 9 вересня 2014 року разом із «Gold Master»-версією Xcode 6.0 для iOS. Swift 1.1 було презентовано 22 жовтня 2014 року разом із Xcode 6.1. Swift 1.2 презентовано 8 квітня 2015 із Xcode 6.3. Swift 2.0 презентовано на WWDC 2015. Оголошення про розробку та подальші плани Swift 3.0 відбулось 3 грудня 2015.
У грудні 2015 року IBM оголосила про запуск сайту Swift Sandbox, який дозволяє розробникам писати код в одному полі та бачити результат виконання в іншому. У січні 2018 Swift Sandbox було визнано застарілим.
В квітні 2016 року журналісти видання The Next Web повідомили, що Google розглядає можливість поліпшити рівень підтримки або Swift або Kotlin платформою Android. Згодом саме мова Kotlin стала рекомендованою для розробки на платформі Android.
Під час WWDC 2019 Apple анонсувала SwiftUI – новий UI-фреймворк для програмних платформ Apple, заснований на принципах декларативного дизайну.
У квітні 2020 року вийшов відкритий неофіційний переклад посібника по використанню Swift.
З версії 5.3, яка вийшла у вересні 2020 року, почалася підтримка Swift для Windows.
Особливості
Swift розроблявся як заміна Objective-C, як мова, що залучає сучасні підходи у проєктуванні програмних систем та має простий синтаксис.
З точки зору синтаксису, Swift наближено до інших популярних ООП-мов, таких як C# та Java. Використовується виклик методів через крапку, для декларування класів та структур використовуються фігурні дужки.
Для управління пам’яттю використовується ARC (автоматичний лічильник посилань). Загалом відсутня система явного управління пам’яттю, проте можливе явне створення небезпечних вказівників для взаємодії з кодом на C та Objective-C.
За замовчуванням, посилання не можуть набувати нульових значень, які в інших мовах позначають відсутність об’єкта. Натоміть, використовуються опціонали – спеціальний тип даних, який явно вказує на відсутність об’єкту за ім’ям.
Екземпляри класів та функції є типами, що передаються за посиланням (типи-посилання), а екземпляри структур, перелічувань та кортежів передаються за значенням (типи-значення).
Підтримуються протоколи, успадкування, узагальнені типи та функції. Типізація статична, проте інформація про типи певною мірою доступна на етапі виконання.
Для програмних платформ Apple використовується окрема версія Swift, яка тісно інтегрована з Objective-C та має підтримку переважної більшості функцій цієї мови, у тому числі її рантайму, на базі якого засновані ключові фреймворки та бібліотеки від Apple.
Можливості для метапрограмування на етапі виконання практично відсутні, але існують конструкції для варіативної компіляції, які враховують цільову платформу та її версію, а також інші атрибути, задані користувачем.
Змінні та константи
Будь-яке значення має бути ініціалізовано до свого першого використання.
Константою у Swift є значення, що визначається лише один раз. Значення константи не обов’язково має бути відомим на етапі компіляції, так, її може бути створено під час створення об’єкта чи у результаті виконання умовних операторів.
Змінна може бути модифікована необмежену кількість разів.
Управління пам'яттю
Використовується декілька способів управління пам’яттю: ARC (автоматичний лічильник посилань), управління пам’яттю для типів значень, ручне управління пам’яттю.
Управління пам’яттю для типів-значень
Пам’ять для типів-значень (вбудовані примітивні типи, структури, перелічування, кортежі) може бути виділена на стеку або на купі. На стеку вона виділяється у тому випадку, якщо значення не міститься у типі-посиланні та не містить тип-посилання. У такому разі на етапі компіляції може бути обрахована кількість пам’яті для виділення, а також визначені точки виділення та звільнення пам’яті. В іншому разі відбувається виділення пам’яті на купі, яке є повільнішим та обраховується під час виконання програми.
З точки зору користовуача, структури створюються під час першої ініціалізації, копіюються під час кожної операції присвоєння та вивільняються після виходу з зони видимості. Фактично використовується відкладене копіювання, тобто копіювання після першої зміни. Також з точки зору семантики, зміна будь-якого поля структури є створенням нової структури на базі старої зі зміненим полем, тому неможливо змінити значення поля структури, визначеної константою.
Для передачі структури за посиланням використовується ключове слово inout
, проте посилання на структури не можна зберігати безпечно.
Управління пам’яттю за допомогою ARC
З точки зору користувача, типи-посилання (класи) створюються під час першої ініціалізації, передаються за посиланням під час операції присвоєння та вивільняються з пам’яті тоді, коли на об’єкт більше немає посилань.
Кожне значення типу-посилання містить лічильник, значення якого дорівнює 1 на момент створення. Під час створення кожного сильного посилання на об’єкт лічильник збільшується на 1. Під час вилучення посилання, значення лічильника зменшується на 1. Коли значення лічильника стає рівним 0, об’єкт вивільняється з пам’яті.
Можливе утворення циклів посилань, коли два об’єкти, що вийшли з області видимості, посилаються одне на одного і утримують одне одного в пам’яті. Для уникнення таких циклів використовуються слабкі посилання, які не враховуються у роботи лічильника. Слабкі посилання позначаються ключовими словами weak
та unowned
.
Ручне управління пам'яттю
Можливе створення небезпечних вказівників, управління створенням на вивільненням яких здійснюється вручну, однак кожен з типів небпзечних вказівників не має всього набору можливостей, які є у такого вказівника у мові C.
Також для пришвидшення роботи можуть бути використані об’єкти NSAutoreleasePool, які дозволяють звільнити деяку кількість об’єктів у визначений програмістом час.
Інкапсуляція
Swift підтримує такі області видимості:
private
– видимість лише у межах типу;fileprivate
– видимість лише у межах файлу;internal
(не позначається) – видимість у межах модуля;public
– видимість поза модулем; без можливості перевизначення для полів та успадкування для класу;open
– видимість поза модулем із можливостямі перевизначення для полів та успадкування для класу;
У Swift немає аналога protected
(видимість тільки для класів-нащадків у інших мовах програмування), fileprivate
часто використовується для зв’язування типів та розширень зі збереженнях загальної інкапсуляції на рівні файлу.
Поля та функції типу
- Обчислювана властивість – синтаксичний цукор для функції без аргументів, виклик якої виглядає як доступ до поля;
- Лінива властивість – обчислюється під час першого виклику і далі є сталою;
- Властивість – може зберігати у собі значення або його відображати. Можна встановити функції, які будуть виконуватися під час отримання значення (
get
), під час присвоєння (set
), до та після присвоєння (willSet
таdidSet
); - Функція – не зберігає стану, може мати від 0 аргументів та повертати результат;
Будь-які функції та поля, крім лінвих, можуть бути статичними, тобто бути полем або функцією типу, а не екземпляру типу. При цьому існує два позначення статичності: class
для полів, що можуть бути перевизначені та static
для полів, які не можуть бути перевизначені у класі-нащадку.
Також будь-яке поле може бути позначене як final
, тобто поле, що не може бути перевизначене, static
та final class
є синонімічними для позначення поля класу.
Узагальнення
Swift підтримує розвинуту систему узагальнень. Будь-який тип чи функція може бути узагальнено за допомогою параметрів, що додаються після імені у кутових дужках. Для таких типів може бути встановлено обмеження на рівність деяким інших типам, імплементацію протоколів чи на успадкування від деяких типів. При цьому узагальнення для протоколів, так звані асоційовані типи, можуть мати навіть вимогу на імплементацію цього ж протоколу рекурсивно. Це породжує теоретичну Тюрінг-повноту для узагальнень, яка не реалізована у реальних компіляторах та її реалізація не планується. Встановлено обмеження на кількість таких вкладень.
Типи-перелічування
Типи-перелічування можуть бути представлені рядками, цілими числами та числами з рухомою комою. Якщо вони не представлені цими типами, кожен варіант перелічування може мати асоційовані з ним значення, як анонімні, так і поіменовані. Для роботи з типами-перелічування використовуються оператори if case
, guard case
, for case
та switch
.
Окремим випадком перелічувань є опціонали. Це типи, що замінюють у Swift концепцію нульового указника на позначення відсутності об’єкта. Тип Optional
складається з двох варіантів: none
та some(T)
, тобто може приймати значення або відсутності, або наявності об’єкта. Розкриття опціоналу називається отримання його значення. Для цього типу впроваджена велика кількість синтаксичного цукру (ланцюжок опціоналів, примусове та умовне розкриття опціоналу оператор ??
для позначення альтернативи при розкритті значення none. Для позначення змінних-опціоналів є спеціальний літерал, також є літерал, що вказує на розкритість значення за замовчуванням (за відсутності значення станеться помилка).
Розширення
У Swift можна створювати розширення типів. У них можна визначити додаткові функції та поля для об’єктів типу та самих типів, проте неможливо зберігати значення.
Можна розширювати також окремі випадки узагальнених типів (наприклад, встановти, що розширення стосується лише типу, що параметризовано значенням, яке відповідає певному протоколу).
Успадкування
Система успадкування Swft характеризується такими особливостями:
- Успадкування підтримується лише для класів;
- Множинне успадкування неможливе;
- Можливе перевизначення як полів класу, так і полів об’єкту класу;
Імплементація протоколів
Протокол у Swift визначає деякі вимоги до типу. Ці вимоги можуть стосуватися наявності функцій у типі, змінних типу, необхідності визначення інших типів даним типом (асоційовані типи), класу, від якого має успадкуватися клас чи інших протоколів, які має імплементувати клас.
Будь-який тип у Swift може імплементувати протокол. Також імплементація протоколу для будь-якого типу можлива за допомогою розширення.
Змінні, що мають тип протоколу, посідають окреме місце у системі типів Swift. Такі змінні називаються екзистенціалами та до них використовується динамічна диспетчерізація. Створення екзистенціалів неможливо для протоколів, які мають вимоги до асоційованих типів, у тому числі і посилаються на тип-нащадок Self у своїх вимогах. Причина цього полягає в тому, що динамічна диспетчерізація у Swift не може бути використана для визначення таких пов’язаних типів.
Приклад коду
// це приклад однорядкового коментаря /* це також коментар, але написаний в декілька рядків */ /* багаторядкові коментарі /* можуть бути вкладені! */ тому ви можете поміщати коментарі в блоки */ /* оголошення змінних у Swift починається із службового слова "var", після якого повинні бути ім'я змінної, тип змінної та початкове значення */ var explicitDouble: Double = 70 // якщо тип змінної не вказано, Swift обере його автоматично на основі початкового значення var implicitInteger = 70 var implicitDouble = 70.0 var 国 = "日本" /* оголошення константи у Swift починається із службового слова "let", після якого повинні бути ім'я змінної, тип змінної та початкове значення */ let numberOfBananas: Int = 10 // якщо тип константи не вказано, Swift обере його автоматично на основі початкового значення let numberOfApples = 3 let numberOfOranges = 5 // значення змінних та констант можуть бути вставлені у рядки (змінні типу string) наступним чином let appleSummary = "I have \(numberOfApples) apples." let fruitSummary = "I have \(numberOfApples + numberOfOranges) pieces of fruit." // оголошення масиву даних var fruits = ["mango", "kiwi", "avocado"] // приклад ключового слова if; обчислюваних властивостей .isEmpty, та .count if fruits.isEmpty { print("Фрукти відсутні у масиві даних.") } else { print("В масиві даних є \(fruits.count) фруктів") } // приклад оголошення "словника" (dictionary ) з 4 елементів, кожен із яких містить ім'я та вік let people = ["Anna": 67, "Beto": 8, "Jack": 33, "Sam": 25] // використовуючи можливості мови Swift, ми надрукуємо обидва значення в єдиному циклі for (name, age) in people { print("\(name) is \(age) years old.") } // оголошення методів починається із службового слова "func" // тип результату описується після "->" func sayHello(to personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting } // як вивести в консолі словосполучення "Hello, Jane!", використовуючи вище описаний метод print(sayHello(to: "Jane"))
Примітки
- . Архів оригіналу за 26 грудня 2015.
- . Архів оригіналу за 3 червня 2014. Процитовано 3 червня 2014.
- (3 червня 2014). . Chris Lattner. Архів оригіналу за 22 грудня 2015. Процитовано 3 червня 2014.
I started work on the Swift Programming Language in July of 2010. I implemented much of the basic language structure, with only a few people knowing of its existence. A few other (amazing) people started contributing in earnest late in 2011, and it became a major focus for the Apple Developer Tools group in July 2013 [...] drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
- Platforms State of the Union, Session 102, Apple Worldwide Developers Conference, June 2, 2014
- . Apple. 2 червня 2014. Архів оригіналу за 18 жовтня 2014. Процитовано 2 червня 2014.
- . 9 вересня, 2014. Архів оригіналу за 11 липня 2016. Процитовано 10 вересня 2014.
- . 22 жовтня 2014. Архів оригіналу за 18 березня 2016. Процитовано 4 березня 2015.
- . 8 квітня 2015. Архів оригіналу за 18 березня 2016. Процитовано 4 березня 2015.
- . Архів оригіналу за 4 березня 2016. Процитовано 4 березня 2016.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - Mayo, Benjamin (4 грудня 2015). . 9to5Mac (амер.). Архів оригіналу за 20 серпня 2021. Процитовано 20 серпня 2021.
- Nate Swanner (7 квітня 2016). . The Next Web. https://www.facebook.com/thenextweb. Архів оригіналу за 10 квітня 2016. Процитовано 11 квітня 2016.
- . TechCrunch (амер.). Архів оригіналу за 24 червня 2020. Процитовано 20 серпня 2021.
- Володько, В'ячеслав. . book.swift.org.ua (Українська) . Архів оригіналу за 4 грудня 2020. Процитовано 20 квітня 2020.
- Inc, Apple (22 вересня 2020). . Swift.org (англ.). Архів оригіналу за 16 серпня 2021. Процитовано 20 серпня 2021.
- . docs.swift.org. Архів оригіналу за 9 вересня 2021. Процитовано 20 серпня 2021.
- . docs.swift.org. Архів оригіналу за 23 липня 2021. Процитовано 20 серпня 2021.
- . docs.swift.org. Архів оригіналу за 11 грудня 2020. Процитовано 20 серпня 2021.
- Bakshi, Neel (25 березня 2021). Classes vs. Structs in Swift — Basics and Memory Management. Medium (англ.). Процитовано 23 серпня 2021.
Див. також
Посилання
- Офіційний сайт [ 15 червня 2019 у Wayback Machine.]
- Swift на Apple.com [ 3 червня 2014 у Wayback Machine.]
- Офіційний проєкт на Github [ 12 червня 2019 у Wayback Machine.]
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Svift Swift bagatoparadigmova kompilovana mova programuvannya rozroblena kompaniyeyu Apple dlya togo shob spivisnuvati z Objective C i buti stijkishoyu do pomilkovogo kodu Swift bula predstavlena na konferenciyi rozrobnikiv WWDC 2014 Mova pobudovana z LLVM kompilyatorom vklyuchenogo u Xcode 6 beta Bezkoshtovnij posibnik movi programuvannya Swift dostupnij dlya zavantazhennya u magazini iBooks Swift mova programuvannya ParadigmaBagatoparadigmova ob yektno oriyentovana funkcijna imperativna blochno strukturovana Data poyavi2014Tvorcita Apple Inc RozrobnikApple Inc Ostannij reliz5 25 bereznya 2019 10 misyaciv nazad 5 grudnya 2017 6 rokiv tomu 2017 12 05 Sistema tipizaciyistatichna suvora vivid tipivPid vplivom vidObjective C Rust Haskell Ruby Python C CLU Vplinula naRustOperacijna sistemaiOS macOS watchOS Linux tvOSLicenziyaApache License pochinayuchi z Swift 2 2 Propriyetarna do versiyi Swift 2 2 Zvichajni rozshirennya fajliv swiftRepozitorij vihidnogo kodugithub com apple swiftVebsajtswift org Mediafajli u Vikishovishi Kompilyator Swift pobudovanij z vikoristannyam tehnologij vilnogo proyektu LLVM Swift uspadkovuye najkrashi elementi mov C i Objective C tomu sintaksis zvichnij dlya znajomih z nimi rozrobnikiv ale vodnochas vidriznyayetsya vikoristannyam zasobiv avtomatichnogo rozpodilu pam yati i kontrolyu perepovnennya zminnih i masiviv sho znachno zbilshuye nadijnist i bezpeku kodu Pri comu Swift programi kompilyuyutsya u mashinnij kod sho dozvolyaye zabezpechiti visoku shvidkodiyu Za zayavoyu Apple kod Swift vikonuyetsya v 1 3 razi shvidshe kodu na Objective C Zamist zbiracha smittya Objective C v Swift vikoristovuyutsya zasobi pidrahunku posilan na ob yekti a takozh nadani u LLVM optimizaciyi taki yak avtovektorizaciya Mova takozh proponuye nizku suchasnih metodiv programuvannya takih yak zamikannya uzagalnene programuvannya lyambda virazi kortezhi i slovnikovi tipi shvidki operaciyi nad kolekciyami elementi funkcijnogo programuvannya Osnovnim zastosuvannyam Swift ye rozrobka koristuvackih zastosunkiv dlya macOS iOS tvOS watchOS z vikoristannyam tulkita Cocoa i Cocoa Touch Pri comu Swift nadaye ob yektnu model sumisnu z Objective C Sircevij kod movoyu Swift mozhe zmishuvatisya z kodom na S i Objective C v odnomu proyekti Swift shilno integrovano do vlasnickogo seredovisha rozrobki Xcode prote mozhe buti viklikano z terminalu sho umozhlivlyuye yiyi vikoristannya na operacijnij sistemah vidminnih vid macOS napriklad na Linux Okremo varto vidznachiti sho Swift vid kompaniyi Apple ne varto plutati z dosit davno rozroblyuvanoyu skriptovoyu movoyu Swift nacilenoyi na bagatoniteve programuvannya i postavlenogo pid vilnoyu licenziyeyu Apache IstoriyaRozrobku movi Swift pochav u spivpraci iz bagatma inshimi programistami Ideyi dlya Swift zapozicheni iz takih mov programuvannya yak Objective C Rust Haskell Ruby Python C CLU ta bagatoh inshih iz spisku 2 chervnya 2014 roku na Vsesvitnij konferenciyi rozrobnikiv vpershe oficijno bulo predstavleno dodatok napisanij movoyu Swift Beta versiya movi stala dostupna dlya zareyestrovanih rozrobnikiv na sajti kompaniyi ale v Apple ne garantuvali sho predstavlena versiya bude sumisna iz finalnoyu versiyeyu Takozh bulo predstavleno bezplatnij posibnik po vikoristannyu Swift obsyagom 500 storinok na servisi IBooks Versiya Swift 1 0 bula vipushena 9 veresnya 2014 roku razom iz Gold Master versiyeyu Xcode 6 0 dlya iOS Swift 1 1 bulo prezentovano 22 zhovtnya 2014 roku razom iz Xcode 6 1 Swift 1 2 prezentovano 8 kvitnya 2015 iz Xcode 6 3 Swift 2 0 prezentovano na WWDC 2015 Ogoloshennya pro rozrobku ta podalshi plani Swift 3 0 vidbulos 3 grudnya 2015 U grudni 2015 roku IBM ogolosila pro zapusk sajtu Swift Sandbox yakij dozvolyaye rozrobnikam pisati kod v odnomu poli ta bachiti rezultat vikonannya v inshomu U sichni 2018 Swift Sandbox bulo viznano zastarilim V kvitni 2016 roku zhurnalisti vidannya The Next Web povidomili sho Google rozglyadaye mozhlivist polipshiti riven pidtrimki abo Swift abo Kotlin platformoyu Android Zgodom same mova Kotlin stala rekomendovanoyu dlya rozrobki na platformi Android Pid chas WWDC 2019 Apple anonsuvala SwiftUI novij UI frejmvork dlya programnih platform Apple zasnovanij na principah deklarativnogo dizajnu U kvitni 2020 roku vijshov vidkritij neoficijnij pereklad posibnika po vikoristannyu Swift Z versiyi 5 3 yaka vijshla u veresni 2020 roku pochalasya pidtrimka Swift dlya Windows OsoblivostiSwift rozroblyavsya yak zamina Objective C yak mova sho zaluchaye suchasni pidhodi u proyektuvanni programnih sistem ta maye prostij sintaksis Z tochki zoru sintaksisu Swift nablizheno do inshih populyarnih OOP mov takih yak C ta Java Vikoristovuyetsya viklik metodiv cherez krapku dlya deklaruvannya klasiv ta struktur vikoristovuyutsya figurni duzhki Dlya upravlinnya pam yattyu vikoristovuyetsya ARC avtomatichnij lichilnik posilan Zagalom vidsutnya sistema yavnogo upravlinnya pam yattyu prote mozhlive yavne stvorennya nebezpechnih vkazivnikiv dlya vzayemodiyi z kodom na C ta Objective C Za zamovchuvannyam posilannya ne mozhut nabuvati nulovih znachen yaki v inshih movah poznachayut vidsutnist ob yekta Natomit vikoristovuyutsya opcionali specialnij tip danih yakij yavno vkazuye na vidsutnist ob yektu za im yam Ekzemplyari klasiv ta funkciyi ye tipami sho peredayutsya za posilannyam tipi posilannya a ekzemplyari struktur perelichuvan ta kortezhiv peredayutsya za znachennyam tipi znachennya Pidtrimuyutsya protokoli uspadkuvannya uzagalneni tipi ta funkciyi Tipizaciya statichna prote informaciya pro tipi pevnoyu miroyu dostupna na etapi vikonannya Dlya programnih platform Apple vikoristovuyetsya okrema versiya Swift yaka tisno integrovana z Objective C ta maye pidtrimku perevazhnoyi bilshosti funkcij ciyeyi movi u tomu chisli yiyi rantajmu na bazi yakogo zasnovani klyuchovi frejmvorki ta biblioteki vid Apple Mozhlivosti dlya metaprogramuvannya na etapi vikonannya praktichno vidsutni ale isnuyut konstrukciyi dlya variativnoyi kompilyaciyi yaki vrahovuyut cilovu platformu ta yiyi versiyu a takozh inshi atributi zadani koristuvachem Zminni ta konstanti Bud yake znachennya maye buti inicializovano do svogo pershogo vikoristannya Konstantoyu u Swift ye znachennya sho viznachayetsya lishe odin raz Znachennya konstanti ne obov yazkovo maye buti vidomim na etapi kompilyaciyi tak yiyi mozhe buti stvoreno pid chas stvorennya ob yekta chi u rezultati vikonannya umovnih operatoriv Zminna mozhe buti modifikovana neobmezhenu kilkist raziv Upravlinnya pam yattyu Vikoristovuyetsya dekilka sposobiv upravlinnya pam yattyu ARC avtomatichnij lichilnik posilan upravlinnya pam yattyu dlya tipiv znachen ruchne upravlinnya pam yattyu Upravlinnya pam yattyu dlya tipiv znachen Pam yat dlya tipiv znachen vbudovani primitivni tipi strukturi perelichuvannya kortezhi mozhe buti vidilena na steku abo na kupi Na steku vona vidilyayetsya u tomu vipadku yaksho znachennya ne mistitsya u tipi posilanni ta ne mistit tip posilannya U takomu razi na etapi kompilyaciyi mozhe buti obrahovana kilkist pam yati dlya vidilennya a takozh viznacheni tochki vidilennya ta zvilnennya pam yati V inshomu razi vidbuvayetsya vidilennya pam yati na kupi yake ye povilnishim ta obrahovuyetsya pid chas vikonannya programi Z tochki zoru koristovuacha strukturi stvoryuyutsya pid chas pershoyi inicializaciyi kopiyuyutsya pid chas kozhnoyi operaciyi prisvoyennya ta vivilnyayutsya pislya vihodu z zoni vidimosti Faktichno vikoristovuyetsya vidkladene kopiyuvannya tobto kopiyuvannya pislya pershoyi zmini Takozh z tochki zoru semantiki zmina bud yakogo polya strukturi ye stvorennyam novoyi strukturi na bazi staroyi zi zminenim polem tomu nemozhlivo zminiti znachennya polya strukturi viznachenoyi konstantoyu Dlya peredachi strukturi za posilannyam vikoristovuyetsya klyuchove slovo inout prote posilannya na strukturi ne mozhna zberigati bezpechno Upravlinnya pam yattyu za dopomogoyu ARC Z tochki zoru koristuvacha tipi posilannya klasi stvoryuyutsya pid chas pershoyi inicializaciyi peredayutsya za posilannyam pid chas operaciyi prisvoyennya ta vivilnyayutsya z pam yati todi koli na ob yekt bilshe nemaye posilan Kozhne znachennya tipu posilannya mistit lichilnik znachennya yakogo dorivnyuye 1 na moment stvorennya Pid chas stvorennya kozhnogo silnogo posilannya na ob yekt lichilnik zbilshuyetsya na 1 Pid chas viluchennya posilannya znachennya lichilnika zmenshuyetsya na 1 Koli znachennya lichilnika staye rivnim 0 ob yekt vivilnyayetsya z pam yati Mozhlive utvorennya cikliv posilan koli dva ob yekti sho vijshli z oblasti vidimosti posilayutsya odne na odnogo i utrimuyut odne odnogo v pam yati Dlya uniknennya takih cikliv vikoristovuyutsya slabki posilannya yaki ne vrahovuyutsya u roboti lichilnika Slabki posilannya poznachayutsya klyuchovimi slovami weak ta unowned Ruchne upravlinnya pam yattyu Mozhlive stvorennya nebezpechnih vkazivnikiv upravlinnya stvorennyam na vivilnennyam yakih zdijsnyuyetsya vruchnu odnak kozhen z tipiv nebpzechnih vkazivnikiv ne maye vsogo naboru mozhlivostej yaki ye u takogo vkazivnika u movi C Takozh dlya prishvidshennya roboti mozhut buti vikoristani ob yekti NSAutoreleasePool yaki dozvolyayut zvilniti deyaku kilkist ob yektiv u viznachenij programistom chas Inkapsulyaciya Swift pidtrimuye taki oblasti vidimosti private vidimist lishe u mezhah tipu fileprivate vidimist lishe u mezhah fajlu internal ne poznachayetsya vidimist u mezhah modulya public vidimist poza modulem bez mozhlivosti pereviznachennya dlya poliv ta uspadkuvannya dlya klasu open vidimist poza modulem iz mozhlivostyami pereviznachennya dlya poliv ta uspadkuvannya dlya klasu U Swift nemaye analoga protected vidimist tilki dlya klasiv nashadkiv u inshih movah programuvannya fileprivate chasto vikoristovuyetsya dlya zv yazuvannya tipiv ta rozshiren zi zberezhennyah zagalnoyi inkapsulyaciyi na rivni fajlu Polya ta funkciyi tipu Obchislyuvana vlastivist sintaksichnij cukor dlya funkciyi bez argumentiv viklik yakoyi viglyadaye yak dostup do polya Liniva vlastivist obchislyuyetsya pid chas pershogo vikliku i dali ye staloyu Vlastivist mozhe zberigati u sobi znachennya abo jogo vidobrazhati Mozhna vstanoviti funkciyi yaki budut vikonuvatisya pid chas otrimannya znachennya get pid chas prisvoyennya set do ta pislya prisvoyennya willSet ta didSet Funkciya ne zberigaye stanu mozhe mati vid 0 argumentiv ta povertati rezultat Bud yaki funkciyi ta polya krim linvih mozhut buti statichnimi tobto buti polem abo funkciyeyu tipu a ne ekzemplyaru tipu Pri comu isnuye dva poznachennya statichnosti class dlya poliv sho mozhut buti pereviznacheni ta static dlya poliv yaki ne mozhut buti pereviznacheni u klasi nashadku Takozh bud yake pole mozhe buti poznachene yak final tobto pole sho ne mozhe buti pereviznachene static ta final class ye sinonimichnimi dlya poznachennya polya klasu Uzagalnennya Swift pidtrimuye rozvinutu sistemu uzagalnen Bud yakij tip chi funkciya mozhe buti uzagalneno za dopomogoyu parametriv sho dodayutsya pislya imeni u kutovih duzhkah Dlya takih tipiv mozhe buti vstanovleno obmezhennya na rivnist deyakim inshih tipam implementaciyu protokoliv chi na uspadkuvannya vid deyakih tipiv Pri comu uzagalnennya dlya protokoliv tak zvani asocijovani tipi mozhut mati navit vimogu na implementaciyu cogo zh protokolu rekursivno Ce porodzhuye teoretichnu Tyuring povnotu dlya uzagalnen yaka ne realizovana u realnih kompilyatorah ta yiyi realizaciya ne planuyetsya Vstanovleno obmezhennya na kilkist takih vkladen Tipi perelichuvannya Tipi perelichuvannya mozhut buti predstavleni ryadkami cilimi chislami ta chislami z ruhomoyu komoyu Yaksho voni ne predstavleni cimi tipami kozhen variant perelichuvannya mozhe mati asocijovani z nim znachennya yak anonimni tak i poimenovani Dlya roboti z tipami perelichuvannya vikoristovuyutsya operatori if case guard case for caseta switch Okremim vipadkom perelichuvan ye opcionali Ce tipi sho zaminyuyut u Swift koncepciyu nulovogo ukaznika na poznachennya vidsutnosti ob yekta Tip Optional skladayetsya z dvoh variantiv none ta some T tobto mozhe prijmati znachennya abo vidsutnosti abo nayavnosti ob yekta Rozkrittya opcionalu nazivayetsya otrimannya jogo znachennya Dlya cogo tipu vprovadzhena velika kilkist sintaksichnogo cukru lancyuzhok opcionaliv primusove ta umovne rozkrittya opcionalu operator dlya poznachennya alternativi pri rozkritti znachennya none Dlya poznachennya zminnih opcionaliv ye specialnij literal takozh ye literal sho vkazuye na rozkritist znachennya za zamovchuvannyam za vidsutnosti znachennya stanetsya pomilka Rozshirennya U Swift mozhna stvoryuvati rozshirennya tipiv U nih mozhna viznachiti dodatkovi funkciyi ta polya dlya ob yektiv tipu ta samih tipiv prote nemozhlivo zberigati znachennya Mozhna rozshiryuvati takozh okremi vipadki uzagalnenih tipiv napriklad vstanovti sho rozshirennya stosuyetsya lishe tipu sho parametrizovano znachennyam yake vidpovidaye pevnomu protokolu Uspadkuvannya Sistema uspadkuvannya Swft harakterizuyetsya takimi osoblivostyami Uspadkuvannya pidtrimuyetsya lishe dlya klasiv Mnozhinne uspadkuvannya nemozhlive Mozhlive pereviznachennya yak poliv klasu tak i poliv ob yektu klasu Implementaciya protokoliv Protokol u Swift viznachaye deyaki vimogi do tipu Ci vimogi mozhut stosuvatisya nayavnosti funkcij u tipi zminnih tipu neobhidnosti viznachennya inshih tipiv danim tipom asocijovani tipi klasu vid yakogo maye uspadkuvatisya klas chi inshih protokoliv yaki maye implementuvati klas Bud yakij tip u Swift mozhe implementuvati protokol Takozh implementaciya protokolu dlya bud yakogo tipu mozhliva za dopomogoyu rozshirennya Zminni sho mayut tip protokolu posidayut okreme misce u sistemi tipiv Swift Taki zminni nazivayutsya ekzistencialami ta do nih vikoristovuyetsya dinamichna dispetcherizaciya Stvorennya ekzistencialiv nemozhlivo dlya protokoliv yaki mayut vimogi do asocijovanih tipiv u tomu chisli i posilayutsya na tip nashadok Self u svoyih vimogah Prichina cogo polyagaye v tomu sho dinamichna dispetcherizaciya u Swift ne mozhe buti vikoristana dlya viznachennya takih pov yazanih tipiv Priklad kodu ce priklad odnoryadkovogo komentarya ce takozh komentar ale napisanij v dekilka ryadkiv bagatoryadkovi komentari mozhut buti vkladeni tomu vi mozhete pomishati komentari v bloki ogoloshennya zminnih u Swift pochinayetsya iz sluzhbovogo slova var pislya yakogo povinni buti im ya zminnoyi tip zminnoyi ta pochatkove znachennya var explicitDouble Double 70 yaksho tip zminnoyi ne vkazano Swift obere jogo avtomatichno na osnovi pochatkovogo znachennya var implicitInteger 70 var implicitDouble 70 0 var 国 日本 ogoloshennya konstanti u Swift pochinayetsya iz sluzhbovogo slova let pislya yakogo povinni buti im ya zminnoyi tip zminnoyi ta pochatkove znachennya let numberOfBananas Int 10 yaksho tip konstanti ne vkazano Swift obere jogo avtomatichno na osnovi pochatkovogo znachennya let numberOfApples 3 let numberOfOranges 5 znachennya zminnih ta konstant mozhut buti vstavleni u ryadki zminni tipu string nastupnim chinom let appleSummary I have numberOfApples apples let fruitSummary I have numberOfApples numberOfOranges pieces of fruit ogoloshennya masivu danih var fruits mango kiwi avocado priklad klyuchovogo slova if obchislyuvanih vlastivostej isEmpty ta count if fruits isEmpty print Frukti vidsutni u masivi danih else print V masivi danih ye fruits count fruktiv priklad ogoloshennya slovnika dictionary z 4 elementiv kozhen iz yakih mistit im ya ta vik let people Anna 67 Beto 8 Jack 33 Sam 25 vikoristovuyuchi mozhlivosti movi Swift mi nadrukuyemo obidva znachennya v yedinomu cikli for name age in people print name is age years old ogoloshennya metodiv pochinayetsya iz sluzhbovogo slova func tip rezultatu opisuyetsya pislya gt func sayHello to personName String gt String let greeting Hello personName return greeting yak vivesti v konsoli slovospoluchennya Hello Jane vikoristovuyuchi vishe opisanij metod print sayHello to Jane Primitki Arhiv originalu za 26 grudnya 2015 Arhiv originalu za 3 chervnya 2014 Procitovano 3 chervnya 2014 3 chervnya 2014 Chris Lattner Arhiv originalu za 22 grudnya 2015 Procitovano 3 chervnya 2014 I started work on the Swift Programming Language in July of 2010 I implemented much of the basic language structure with only a few people knowing of its existence A few other amazing people started contributing in earnest late in 2011 and it became a major focus for the Apple Developer Tools group in July 2013 drawing ideas from Objective C Rust Haskell Ruby Python C CLU and far too many others to list Platforms State of the Union Session 102 Apple Worldwide Developers Conference June 2 2014 Apple 2 chervnya 2014 Arhiv originalu za 18 zhovtnya 2014 Procitovano 2 chervnya 2014 9 veresnya 2014 Arhiv originalu za 11 lipnya 2016 Procitovano 10 veresnya 2014 22 zhovtnya 2014 Arhiv originalu za 18 bereznya 2016 Procitovano 4 bereznya 2015 8 kvitnya 2015 Arhiv originalu za 18 bereznya 2016 Procitovano 4 bereznya 2015 Arhiv originalu za 4 bereznya 2016 Procitovano 4 bereznya 2016 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Mayo Benjamin 4 grudnya 2015 9to5Mac amer Arhiv originalu za 20 serpnya 2021 Procitovano 20 serpnya 2021 Nate Swanner 7 kvitnya 2016 The Next Web https www facebook com thenextweb Arhiv originalu za 10 kvitnya 2016 Procitovano 11 kvitnya 2016 TechCrunch amer Arhiv originalu za 24 chervnya 2020 Procitovano 20 serpnya 2021 Volodko V yacheslav book swift org ua Ukrayinska Arhiv originalu za 4 grudnya 2020 Procitovano 20 kvitnya 2020 Inc Apple 22 veresnya 2020 Swift org angl Arhiv originalu za 16 serpnya 2021 Procitovano 20 serpnya 2021 docs swift org Arhiv originalu za 9 veresnya 2021 Procitovano 20 serpnya 2021 docs swift org Arhiv originalu za 23 lipnya 2021 Procitovano 20 serpnya 2021 docs swift org Arhiv originalu za 11 grudnya 2020 Procitovano 20 serpnya 2021 Bakshi Neel 25 bereznya 2021 Classes vs Structs in Swift Basics and Memory Management Medium angl Procitovano 23 serpnya 2021 Div takozhXcode Objective C D mova programuvannya KotlinPosilannyaOficijnij sajt 15 chervnya 2019 u Wayback Machine Swift na Apple com 3 chervnya 2014 u Wayback Machine Oficijnij proyekt na Github 12 chervnya 2019 u Wayback Machine Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi