Первая программа на Swift
Play ITЗагрузка интерактивного демо…
Первая программа на Swift
Где применяют Swift
Swift — основной язык iOS, iPadOS, macOS (Xcode). Синтаксис современный — let/var, optionals, безопасность типов. На Linux Swift можно учить как язык; для App Store нужен Mac + Xcode.
Первая программа — Playground или консольный print, затем UI в SwiftUI.
Мобильный раздел: /encyclopedia/4-code-dev/4-12-mobilnye-prilozheniya/1133.
Что получится
| Этап | Результат |
|---|---|
| Окружение | Playground или Xcode |
| Код | print или минимальный SwiftUI |
| Дальше | типы, жизненный цикл, фреймворки |
Что нужно заранее
| Цель | Окружение |
|---|---|
| iPhone / iPad приложение | macOS + Xcode |
| Только язык | Linux/Windows Swift toolchain (ограниченно) |
Платформенные ограничения и возможности
Swift изначально разрабатывался как часть экосистемы Apple, поэтому его нативная поддержка реализована в операционной системе macOS. Для полноценной разработки под iOS, iPadOS и другие платформы Apple требуется именно macOS, поскольку симуляторы устройств, отладчики и компиляторы тесно интегрированы в систему.
Однако благодаря открытому исходному коду Swift доступен и на других платформах:
- Linux: официально поддерживается. Существуют сборки Swift для Ubuntu, CentOS и других дистрибутивов. На Linux можно компилировать и запускать консольные приложения, серверные сервисы, но нельзя собирать приложения под iOS или macOS.
- Windows: поддержка экспериментальная. Компания Apple совместно с сообществом предоставляет инструменты для сборки Swift-приложений на Windows, но функциональность ограничена. Разработка мобильных приложений под Apple через Windows невозможна.
Для новичка, желающего изучить Swift как язык, а не как инструмент для создания iOS-приложений, возможна работа на Linux. Но если цель — создавать приложения для iPhone, iPad или Mac, потребуется компьютер с macOS.
Необходимое программное обеспечение
На macOS — Xcode
Основной инструмент — Xcode: IDE Apple для iOS, iPadOS, macOS, watchOS, tvOS и visionOS. Скачать стабильную версию — из Mac App Store, бета — с developer.apple.com/xcode. Подробный обзор среды (проекты, CLI, Git, сборка, ИИ-ассистенты) — в отдельной статье Xcode — IDE для экосистемы Apple.
Минимум для первой программы:
| Шаг | Действие |
|---|---|
| 1 | Установить Xcode из App Store |
| 2 | Запустить один раз, принять лицензию |
| 3 | В терминале: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer |
| 4 | Проверить: swift --version |
Xcode ставит компилятор Swift, LLDB, симуляторы, SwiftUI Canvas для превью интерфейса и утилиты xcodebuild / xcrun для CLI и CI.
На Linux
Swift можно установить через официальные репозитуары. Пример для Ubuntu 22.04:
wget -qO- https://swift.org/keys/all-keys.asc | gpg --import -
sudo apt-get install -y clang libicu-dev
wget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gz
tar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gz
sudo mv swift-5.9-RELEASE-ubuntu22.04 /usr/share/swift
echo 'export PATH=/usr/share/swift/usr/bin:"$PATH"' >> ~/.bashrc
source ~/.bashrc
Разбор:
wget -qO- ... | gpg --import -импортирует ключи подписи Swift, чтобы проверять доверие к пакетам.apt-get installставит системные зависимости компилятора (clang) и ICU (libicu-dev) для работы стандартной библиотеки Swift.- Пара
wget+tar xzfскачивает и распаковывает официальный toolchain в локальную папку. mv ... /usr/share/swiftпереносит toolchain в стабильный системный путь, аPATHв.bashrcделает командыswiftиswiftcдоступными из любого каталога.source ~/.bashrcприменяет обновлённыйPATHсразу в текущей shell-сессии без перезапуска терминала.
После этого команда swift --version покажет установленную версию.
На Linux нет графической IDE, аналогичной Xcode, но можно использовать Visual Studio Code с расширением Swift for Visual Studio Code или SourceKit-LSP для подсветки синтаксиса, автодополнения и навигации по коду.
На Windows
Поддержка Swift на Windows находится в стадии активной разработки. Официальный установщик доступен на GitHub-репозитории Swift. Установка требует наличия Visual Studio 2022 и компонентов C++. Однако эта конфигурация подходит только для экспериментов и обучения основам языка. Разработка приложений под Apple через Windows невозможна.
Выбор среды разработки
- Xcode — рекомендуемый выбор для всех, кто работает на macOS и планирует создавать приложения под Apple. Это полный набор инструментов, оптимизированный под экосистему.
- Visual Studio Code — легковесная альтернатива для Linux и Windows. Требует ручной настройки, но достаточна для изучения синтаксиса и написания консольных программ.
- Swift REPL — интерактивная оболочка, доступная через терминал (
swift). Позволяет выполнять код построчно, но не подходит для создания полноценных программ.
Подробное сравнение Playground, REPL и скриптов — в интерактивном изучении Swift.
Создание первой программы
Официальный сценарий Apple: Creating an Xcode project for an app. Ниже — сжатая версия с пояснениями.
Подготовка идентификаторов
Перед Create New Project соберите:
| Поле | Пример | Зачем |
|---|---|---|
| Product Name | HelloWorld | Имя приложения (2–30 символов) |
| Organization Identifier | com.example | Обратный DNS; входит в bundle ID |
| Team | ваш Apple ID | Подпись кода (можно добавить позже в Settings → Accounts) |
Bundle ID (com.example.HelloWorld) Xcode сформирует автоматически. Его нельзя свободно менять после первой загрузки в App Store Connect — выбирайте organization identifier осознанно.
Вариант 1 — SwiftUI-приложение (рекомендуется)
- Запустите Xcode → Create New Project (или File → New → Project).
- Выберите платформу iOS (или macOS / Multiplatform).
- Шаблон App → Next.
- Заполните Product Name, Team, Organization Identifier; Interface: SwiftUI, Language: Swift.
- Снимите лишние опции (Core Data, тесты — по желанию) → Next → папка → Create.
Xcode создаст файлы вроде HelloWorldApp.swift (@main) и ContentView.swift. Главное окно IDE:
- слева — Project navigator (файлы);
- в центре — редактор;
- справа — Canvas с превью (если включён).
Чтобы показать "Hello, World!" на экране, откройте ContentView.swift:
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}
#Preview {
ContentView()
}
Разбор:
Text(...)— базовый SwiftUI-виджет; UI описывается декларативно вbody.#Preview— макрос для Canvas: Xcode собирает и рисует view без полного Run (Previewing your app's interface).import SwiftUIподключает фреймворк интерфейса Apple.
Превью в Canvas: выберите ContentView.swift → Editor → Canvas → Resume. Код, Canvas и Inspector синхронизированы (Creating your app's interface with SwiftUI).
Запуск на симуляторе (Building and running an app):
- В toolbar выберите scheme HelloWorld и симулятор (например, iPhone 16 Pro).
- Нажмите Run (▶) или Product → Run.
- Xcode соберёт
.app, откроет Simulator и запустит приложение. - Stop (■) останавливает процесс; в Debug открывается область с консолью и переменными.
Вариант 2 — Консоль без UI
- macOS → Command Line Tool → имя
HelloCLI, язык Swift. - В
main.swift:
print("Hello, World!")
- Run — вывод в Console внизу Xcode.
Разбор:
printпишет в stdout; для CLI-шаблона этого достаточно как smoke-тест toolchain.- Нет
@mainstruct — вmain.swiftвыполнение идёт сверху вниз.
Вариант 2 — Через терминал (macOS, Linux, Windows)
- Создайте папку для проекта:
mkdir hello-swift
cd hello-swift
Разбор:
mkdir hello-swiftсоздаёт отдельную папку проекта, чтобы файлы не смешивались с другими задачами.cd hello-swiftпереводит текущую директорию терминала в новый каталог.- После
cdвсе следующие команды (touch,swift,swiftc) будут выполняться именно внутри этой папки. - Такой шаг формирует чистый и воспроизводимый рабочий контекст для примеров.
- Создайте файл
main.swift:
touch main.swift
Разбор:
touch main.swiftсоздаёт пустой файл исходного кода Swift (или обновляет его timestamp, если он уже есть).- Имя
main.swiftважно для простых CLI-проектов: Swift ожидает точку входа именно в этом файле. - После создания файл можно открыть в любом редакторе и записать код программы.
- Откройте его в любом текстовом редакторе и введите:
print("Hello, World!")
Разбор:
- Одна строка уже является полноценной программой на Swift.
printвызывает стандартный поток вывода и не требует импорта дополнительных модулей.- Синтаксис показывает ключевой принцип Swift: типобезопасность и лаконичность без обязательного
main()в скриптовом режиме.
-
Сохраните файл.
-
Выполните программу:
swift main.swift
Разбор:
- Команда
swift main.swiftзапускает файл в интерпретируемом режиме. - Компилятор компилирует код "на лету", затем сразу исполняет его.
- Этот режим удобен для быстрых экспериментов и обучения, когда не нужен отдельный бинарник.
Компилятор Swift автоматически обработает файл и выведет результат в терминал.
Альтернативно, можно скомпилировать программу в исполняемый файл:
swiftc main.swift -o hello
./hello
Разбор:
swiftc— компилятор Swift для сборки исполняемых файлов.- Флаг
-o helloзадаёт имя результирующего бинарника. ./helloзапускает собранный файл напрямую, без вызова интерпретатораswift.- Такой подход быстрее при многократных запусках и ближе к production-процессу сборки.
Это создаст бинарный файл hello, который можно запускать без вызова интерпретатора.
Структура программы
Простейшая программа на Swift состоит из одной строки:
print("Hello, World!")
Разбор:
- Функция
printпринимает выражение любого типа, который можно представить строкой, и выводит его в консоль. - Здесь передаётся строковый литерал, поэтому результат предсказуемый и используется как smoke-тест окружения.
- Фрагмент полезен как "минимальная точка истины" — если он не запускается, проблема в окружении, а не в бизнес-логике.
Функция print выводит переданный текст в стандартный поток вывода (обычно терминал или консоль отладчика). Swift не требует объявления точки входа вроде main() в явном виде, если файл называется main.swift. В этом случае система автоматически запускает код с первой строки.
Если файл имеет другое имя или используется в составе проекта, точка входа может быть определена явно:
@main
struct HelloWorldApp {
static func main() {
print("Hello, World!")
}
}
Разбор:
@mainпомечает тип как точку входа приложения: именно отсюда начнётся выполнение.static func main()— явная стартовая функция, аналог привычногоmainв других языках.- Внутри
main()вызываетсяprint, поэтому поведение эквивалентно простомуmain.swift, но с более явной структурой. - Такой формат особенно полезен, когда проект растёт и нужен контролируемый старт приложения.
Такой подход применяется в современных проектах SwiftUI, где аннотация @main указывает компилятору на стартовую структуру.
Запуск и отладка
| Способ | Когда использовать |
|---|---|
| Run (▶) в Xcode | Полный цикл: сборка + симулятор/устройство + отладчик |
| Canvas → Live | Быстро потыкать UI в превью без перезапуска симулятора |
swift file.swift | Однофайловый скрипт в терминале |
swiftc + ./binary | Сборка CLI-бинарника |
xcodebuild -scheme … test | Автотесты в CI (см. Xcode — CLI) |
Xcode при сборке анализирует изменённые файлы и по возможности делает инкрементальную пересборку. Ошибки — в Issue navigator; клик по issue открывает строку в редакторе.
Отладка: breakpoint в gutter → Run → при остановке смотрите переменные в debug area, выполняйте po variableName в консоли LLDB.
Частые ошибки
| Симптом | Причина |
|---|---|
| Только macOS для Xcode | iOS-симулятор требует Mac; на Windows — Swift toolchain без UI |
Use of unresolved identifier | Опечатка или файл не в target Membership |
| Playground не компилируется | Версия Xcode ≠ версия Swift в книге |
Что попробовать
swift hello.swiftв терминале — без Xcode.- Строковая интерполяция и ввод из консоли.
- UI: SwiftUI
@main(отдельные материалы Apple-стека).
Интерполяция строк:
let name = "Мария"
let year = 2026
print("Привет, \(name)! Сейчас \(year) год.")
Разбор:
\(...)внутри строки вставляет значение выражения в текст.- Типы, у которых есть строковое представление (
String,Int,Double), подставляются автоматически. - Так формируют читаемый вывод без конкатенации через
+.
Мини-программа с readLine() (CLI):
print("Как вас зовут?")
let name = readLine() ?? "Гость"
print("Здравствуйте, \(name)!")
Разбор:
readLine()возвращаетString?: при EOF или пустом вводе может бытьnil.- Оператор
??подставляет"Гость", если пользователь ничего не ввёл. - Подходит для первых консольных упражнений на macOS/Linux без UI.
Что делать после Hello World
Первая программа закрывает только проверку окружения. Чтобы быстро перейти к реальному прогрессу, полезно сразу сделать короткий набор прикладных упражнений.
Мини-план из трех упражнений
1. Имя и возраст
struct Profile {
let name: String
let age: Int
}
func makeProfile(name: String, ageText: String) -> Profile? {
guard let age = Int(ageText), age >= 0 else { return nil }
return Profile(name: name, age: age)
}
if let p = makeProfile(name: "Аня", ageText: "28") {
print("\(p.name), \(p.age) лет")
}
Разбор:
struct Profileгруппирует связанные данные в одном типе.makeProfileвозвращает optional: при неверном возрасте —nilвместо падения.if letбезопасно распаковывает результат перед выводом.
2. Мини-калькулятор
enum Op { case add, sub }
func calculate(_ a: Int, _ b: Int, op: Op) -> Int {
switch op {
case .add: return a + b
case .sub: return a - b
}
}
print(calculate(10, 3, op: .sub)) // 7
Разбор:
enum Opзадаёт ограниченный набор операций вместо "магических" строк.switchпо enum исчерпывающий: компилятор проверит все варианты.- Функция чистая: один вход — один результат, удобно тестировать.
3. Список задач в памяти
Код ITЗагрузка примера кода…
Разбор:
Arrayхранит элементы в порядке добавления;appendдобавляет в конец.filterстроит новый массив по условию, не мутируя исходный список без необходимости.Identifiableпригодится позже в SwiftUI-списках (List).
Проверка, что окружение готово к следующему шагу
swift --versionи версия Xcode соответствуют ожидаемым.- В Xcode запускаются и Playground, и Command Line Tool.
- Простой проект собирается без неожиданных предупреждений по целевой платформе.
Куда идти дальше
Xcode — IDE → Типы данных → Управляющие конструкции → Интерактивное изучение → Жизненный цикл приложения.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Первые шаги (маршрут подборки) — Первая программа на Rust, Первая программа на Lua, Первая программа на Ruby, Первая программа на Smalltalk, Первая программа на Kotlin, Первая программа на Groovy.