Перейти к основному содержимому

Первая программа на 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 NameHelloWorldИмя приложения (2–30 символов)
Organization Identifiercom.exampleОбратный DNS; входит в bundle ID
Teamваш Apple IDПодпись кода (можно добавить позже в Settings → Accounts)

Bundle ID (com.example.HelloWorld) Xcode сформирует автоматически. Его нельзя свободно менять после первой загрузки в App Store Connect — выбирайте organization identifier осознанно.

Вариант 1 — SwiftUI-приложение (рекомендуется)

  1. Запустите Xcode → Create New Project (или File → New → Project).
  2. Выберите платформу iOS (или macOS / Multiplatform).
  3. Шаблон AppNext.
  4. Заполните Product Name, Team, Organization Identifier; Interface: SwiftUI, Language: Swift.
  5. Снимите лишние опции (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.swiftEditor → CanvasResume. Код, Canvas и Inspector синхронизированы (Creating your app's interface with SwiftUI).

Запуск на симуляторе (Building and running an app):

  1. В toolbar выберите scheme HelloWorld и симулятор (например, iPhone 16 Pro).
  2. Нажмите Run (▶) или Product → Run.
  3. Xcode соберёт .app, откроет Simulator и запустит приложение.
  4. Stop (■) останавливает процесс; в Debug открывается область с консолью и переменными.

Вариант 2 — Консоль без UI

  1. macOS → Command Line Tool → имя HelloCLI, язык Swift.
  2. В main.swift:
print("Hello, World!")
  1. Run — вывод в Console внизу Xcode.

Разбор:

  • print пишет в stdout; для CLI-шаблона этого достаточно как smoke-тест toolchain.
  • Нет @main struct — в main.swift выполнение идёт сверху вниз.

Вариант 2 — Через терминал (macOS, Linux, Windows)

  1. Создайте папку для проекта:
mkdir hello-swift
cd hello-swift

Разбор:

  • mkdir hello-swift создаёт отдельную папку проекта, чтобы файлы не смешивались с другими задачами.
  • cd hello-swift переводит текущую директорию терминала в новый каталог.
  • После cd все следующие команды (touch, swift, swiftc) будут выполняться именно внутри этой папки.
  • Такой шаг формирует чистый и воспроизводимый рабочий контекст для примеров.
  1. Создайте файл main.swift:
touch main.swift

Разбор:

  • touch main.swift создаёт пустой файл исходного кода Swift (или обновляет его timestamp, если он уже есть).
  • Имя main.swift важно для простых CLI-проектов: Swift ожидает точку входа именно в этом файле.
  • После создания файл можно открыть в любом редакторе и записать код программы.
  1. Откройте его в любом текстовом редакторе и введите:
print("Hello, World!")

Разбор:

  • Одна строка уже является полноценной программой на Swift.
  • print вызывает стандартный поток вывода и не требует импорта дополнительных модулей.
  • Синтаксис показывает ключевой принцип Swift: типобезопасность и лаконичность без обязательного main() в скриптовом режиме.
  1. Сохраните файл.

  2. Выполните программу:

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 для XcodeiOS-симулятор требует Mac; на Windows — Swift toolchain без UI
Use of unresolved identifierОпечатка или файл не в target Membership
Playground не компилируетсяВерсия Xcode ≠ версия Swift в книге

Что попробовать

  1. swift hello.swift в терминале — без Xcode.
  2. Строковая интерполяция и ввод из консоли.
  3. 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.