Код
#статьи

Swift: что это за язык программирования

На чём разрабатывают приложения для iPhone и как этому научиться.

Иллюстрация: Оля Ежак для Skillbox Media

Приложения для всех устройств Apple разрабатывают в основном на Swift. Это молодой, но мощный язык программирования. Его синтаксис прост, как у Python, но под капотом скрывается сила Objective-C. В этой статье разберёмся с особенностями Swift и напишем на нём первые программы.

Содержание

Где и для чего используется Swift

Swift — язык программирования для разработки приложений под iOS, iPadOS, macOS, watchOS и tvOS. С недавнего времени в экосистеме Apple появилась VR-гарнитура Vision Pro — приложения для неё также пишут на Swift.

Большинство популярных приложений в App Store написаны на Swift. Этот язык программирования даёт максимально возможный контроль над устройствами Apple, поэтому в сообществе разработчиков считается стандартом.

Инженеры компании поняли, что язык получился мощным и быстрым, а потому постепенно расширяют область применения. Например, уже сейчас на Swift можно писать бэкенд приложений или игры для консоли Playdate, а во время WWDC24 анонсировали использование языка для программирования IoT-устройств.

Что было до Swift

Swift представили в 2014 году во время очередной летней презентации WWDC. Тогда вице-президент по разработке программного обеспечения Apple Крейг Федериги анонсировал современный язык программирования. Новинку приняли скептически — разработчики не понимали, зачем им менять привычный стек.

Крейг Федериги презентует Swift в 2014 году
Кадр: TWiT Tech Podcast Network / YouTube

До этого приложения для экосистемы Apple разрабатывались на Objective-C — языке программирования от Apple родом из 1983 года. Его разработали на базе популярного в то время C, а архитектуру сделали максимально подходящей под macOS. Время шло, в мире появились iPhone и iPad, а на Objective-C разрабатывать приложения становилось всё сложнее.

Objective-C унаследовал все плюсы и минусы C. Он был быстрым и давал программистам возможность работы с памятью, однако и без того громоздкий синтаксис с каждым годом становился всё сложнее. Сторонним компаниям нужны были разработчики под iOS, но обучать кадры работе с Objective-C было сложно и дорого.

Именно поэтому в 2010 году в Apple решили изобрести новый язык программирования. Во время работы над Swift инженеры компании позаимствовали лучшие решения из Objective-C, Python, Rust, C#, Ruby и других языков программирования.

Первая версия языка стала доступна в 2014 году, а уже спустя год представили обновление с доработками, которые предложило сообщество. Актуальная версия языка на момент выхода статьи — Swift 5.10, однако в феврале 2024 года Apple анонсировала Swift 6.0.

В чём сила Swift

У Swift, как и у любого другого языка, есть отличительные характеристики:

  • Открытый. Код самого языка программирования и всех необходимых инструментов для компиляции, отладки и сборки проектов открыт. Исходники опубликованы на GitHub, а это значит, что любой разработчик может изучить архитектуру Swift и предложить изменения. Если они окажутся полезными, то сообщество проголосует за включение их в основную версию.
Организация разработчиков языка Swift на GitHub
Скриншот: SwiftLang / GitHub / Skillbox Media
  • Компилируемый. Исходный код проектов на Swift компилируется в машинный код. Это повышает скорость работы и позволяет по максимуму использовать вычислительные возможности устройств Apple. При этом есть песочница, в которой можно писать код и не компилировать проект при каждом запуске.
  • Мультипарадигменный. В Swift есть всё необходимое как для функционального программирования, так и для объектно-ориентированного. Это даёт разработчикам возможность не привязываться к определённому подходу и использовать язык для решения разных задач.
  • Безопасный. Swift умеет обрабатывать большинство распространённых ошибок. Например, если использовать неправильные типы данных для переменных, то компилятор предупредит об этом программиста.
  • Дружелюбный для новичков. Синтаксис Swift получился довольно простым для начинающих. В философии языка заложено, что лучший вариант кода для решения задачи — самый простой и очевидный.

Плюсы и минусы


Плюсы

  • Производительность. Инженеры Apple разрабатывали новый язык на основе C-подобного предшественника. Большое внимание уделяли производительности и экономии ресурсов. Этого удалось добиться благодаря компилируемому коду.
  • Совместимость с Objective-C. У Swift есть обратная совместимость с Objective-C, а это значит, что в современных проектах можно использовать устаревшие, но надёжные библиотеки. А ещё это упрощает миграцию на новый язык программирования.
  • Активное развитие. Каждый год разработчики Apple выпускают обновления, добавляют новые возможности и поддерживаемые платформы.

Минусы

  • Молодой язык. Каждый год для Swift появляются новые инструменты, библиотеки и API. Нюанс в том, что программистам надо постоянно следить за обновлениями и учиться, чтобы поддерживать необходимый уровень знаний для разработки современных приложений.
  • Меньше библиотек. В экосистеме Swift всё ещё мало инструментов и библиотек, поэтому многие решения приходится писать с нуля. Таких проблем нет при использовании более популярных Python и JavaScript.
  • Фокус на Apple. Инженеры Apple пытаются вывести язык на новый уровень и найти ему применение в новых областях. Несмотря на это, Swift всё ещё востребован исключительно в разработке под «яблочную» экосистему. Пока сложно представить, что крупная компания откажется, например, от Java на бэкенде и перейдёт на Swift.
  • Маленькое сообщество. Программистов, пишущих на Swift, довольно мало, поэтому иногда в Сети бывает сложно найти ответы на специфические вопросы.
  • Высокий порог входа. Для программирования на языке от Apple нужен компьютер от Apple. Это усложняет вход в разработку на Swift.

Пишем код

Рассмотрим несколько примеров кода на Swift, чтобы оценить синтаксис языка и его возможности. Если вы знаете, к примеру, Python, то быстро разберётесь с простыми программами на Swift.

🛠️ Технические детали

Если вы захотите запустить примеры кода из статьи, но у вас нет компьютера на macOS, то используйте для этого онлайн-компилятор Programiz. А чтобы запустить код в Xcode, надо создать «Инструмент командной строки»:

  • Запустите Xcode и в приветственном меню выберите пункт Create New Project.
Скриншот: Xcode / Skillbox Media
  • В открывшемся окне переключитесь на вкладку macOS и в разделе Applications выберите Command Line Tool. Нажмите Next.
Скриншот: Xcode / Skillbox Media
  • Введите имя проекта и снова нажмите Next.
Скриншот: Xcode / Skillbox Media
  • Переключитесь на файл main.swift — в нём мы и будем писать код. Проект запускается с помощью кнопки Start в левом верхнем углу, а терминал открывается по нажатию иконки в правом нижнем углу.
Скриншот: Xcode / Skillbox Media

Hello, World!

По традиции выведем в консоль фразу Hello, World!. Для этого вызовем функцию print(), а в качестве аргумента передадим строку с нашей фразой, перед этим обязательно обернув её в кавычки:

// С помощью функции print() можно выводить текст в консоль
print("Hello, World!")

// В данном случае Swift напечатает следующую фразу:
>>> Hello, World!

Персонализированное приветствие

Со всем миром поздоровались, теперь поприветствуем каждого пользователя лично. Для этого напишем функцию, которая будет получать имя пользователя и выводить персональное сообщение:

// Определяем функцию greetUser
func greetUser() {
    // Выводим на экран сообщение «Как тебя зовут?»
    print("Как тебя зовут?")
    
    // Считываем из консоли имя пользователя
    if let name = readLine() {
        // Выводим приветствие
        print("Привет, \(name).")
    }
}

// Вызываем функцию greetUser
greetUser()

Результат работы программы выглядит следующим образом:

Скриншот: Xcode / Skillbox Media

Проверка на чётность

Теперь поупражняемся с числами — разработаем функцию, которая принимает на вход пользовательское число и определяет, чётное оно или нет.

// Определяем функцию checkEven
func checkEven() {
    // Считываем число из консоли
    print("Введите число:")
    if let input = readLine(), let number = Int(input) {
        // Проверяем чётность числа
        if number % 2 == 0 {
            // Выводим сообщение, если число чётное
            print("\(number) - чётное число")
        } else {
            // Выводим сообщение, если число нечётное
            print("\(number) - нечётное число")
        }
    } else {
        // Выводим сообщение, если пользователь ввёл не число
        print("Ошибка: Введите число ")
    }
}

// Вызываем функцию checkEven
checkEven()

Так функция работает на разных типах данных:

Скриншот: Xcode / Skillbox Media

Салют, Swift: пишем первый проект

Пришло время создать первый проект на Swift — напишем полноценную игру «Угадай число» для терминала. Компьютер будет загадывать случайное число от 1 до 100, а пользователь — пытаться угадать. Игра завершится, как только в терминале появится правильный ответ.

Для начала импортируем модуль Foundation, без которого не будут работать функции стандартной библиотеки Swift. После этого объявим функцию guessNumberGame — в ней реализуем игровой цикл:

import Foundation
func guessNumberGame() {
}

Объявим константу targetNumber, в которую запишем случайное число от 1 до 100. После выведем в терминал сообщение для пользователя с правилами игры и создадим переменную guess, в которой будем хранить текущую попытку игрока:

let targetNumber = Int.random(in: 1...100)
    
    print("Добро пожаловать в игру 'Угадай число'!")
    print("Я загадал число от 1 до 100. Попробуй угадать его.")
    
    var guess: Int? = nil

В главном цикле будем считывать ввод пользователя из терминала и сравнивать со сгенерированным числом. Если число не подходит, то выводим подсказку, а если всё правильно — поздравление и выходим из цикла. В конце обязательно делаем проверку, чтобы игрок вводил именно числа, а не слова:

while true {
        print("Введите ваше предположение:", terminator: " ")
        
        if let input = readLine() {
            guess = Int(input)
            
            if let guess = guess {
                if guess < targetNumber {
                    print("Моё число больше. Попробуйте ещё раз.")
                } else if guess > targetNumber {
                    print("Моё число меньше. Попробуйте ещё раз.")
                } else {
                    print("Поздравляю! Вы угадали число \(targetNumber)!")
                    break
                }
            } else {
                print("Пожалуйста, введите корректное число.")
            }
        }
    }

В конце вызываем функцию guessNumberGame:

guessNumberGame()

Полностью код игры выглядит следующим образом:

// Импортируем модуль Foundation для использования функций стандартной библиотеки
import Foundation

// Главная функция игры
func guessNumberGame() {
    // Генерируем случайное число от 1 до 100 включительно
    let targetNumber = Int.random(in: 1...100)
    
    // Выводим приветственное сообщение и правила игры
    print("Добро пожаловать в игру 'Угадай число'!")
    print("Я загадал число от 1 до 100. Попробуй угадать его.")
    
    // Переменная для хранения текущей попытки пользователя
    var guess: Int? = nil
    
    while true {
        // Просим пользователя ввести число
        print("Введите ваше предположение:", terminator: " ")
        
        // Читаем ввод из консоли
        if let input = readLine() {
            // Преобразуем полученные данные в целое число
            guess = Int(input)
            
            // Проверяем, ввёл ли пользователь число
            if let guess = guess {
                // Сравниваем число пользователя с загаданным и, если необходимо, просим попробовать ещё раз
                if guess < targetNumber {
                    print("Моё число больше. Попробуйте ещё раз.")
                } else if guess > targetNumber {
                    print("Моё число меньше. Попробуйте ещё раз.")
                } else {
                    // Выводим поздравление, если пользователь угадал число
                    print("Поздравляю! Вы угадали число \(targetNumber)!")
                    break
                }
            } else {
                // Выводим сообщение, если пользователь ввёл не число
                print("Пожалуйста, введите корректное число.")
            }
        }
    }
}

// Вызываем главную функцию игры
guessNumberGame()

А так игра работает в терминале:

Скриншот: Xcode / Skillbox Media

Что нужно новичку

Для поэтапного изучения лучше воспользоваться готовым гайдом, книгой или планом. Например, подойдёт дорожная карта iOS-разработчика от авторов проекта Roadmap.sh.

Компьютер от Apple

Для разработки на Swift надо обзавестись компьютером от Apple. Во время обучения сгодится простой MacBook со вторичного рынка, но лучше обратить внимание на модели 2020 года и новее. Этого хватит, чтобы познакомиться с основами языка и поработать над первыми проектами. Для серьёзной разработки надо будет обновить устройство на более производительное — желательно на процессоре M1, с минимум 16 ГБ оперативной памяти и 512 ГБ постоянной. Среда разработки для Swift очень «прожорливая», поэтому лучше заранее позаботиться о вычислительных ресурсах.

Если хочется сэкономить, то стоит присмотреться к Mac mini. Это компактные настольные компьютеры Apple, которые продаются без монитора, клавиатуры и мышки. Их можно докупить отдельно, выбирая бюджетные варианты. Благодаря этому Mac mini обходится дешевле сопоставимого по мощности MacBook. Главный минус такого решения — отсутствие мобильности. Уйти поработать, скажем, в кафе с таким сетапом будет весьма проблематично :)

Если вы пока не знаете, подходит ли вам Swift, можно попробовать его в онлайн-компиляторе. Такое решение не подойдёт для разработки полноценных приложений, но им можно воспользоваться для знакомства с синтаксисом. Есть бесплатные сервисы Programiz и SwiftFiddle.

Xcode

Xcode — интегрированная среда разработки на Swift. В ней программисты пишут код, тестируют и собирают проекты. На данный момент альтернатив нет, хотя раньше компания JetBrains поддерживала среду AppCode. Проект закрыли спустя некоторое время из-за низкой популярности среди сообщества.

Xcode можно скачать в App Store. Будьте готовы к тому, что IDE может выдавать ошибки или странно себя вести. Не пугайтесь, что в App Store у официальной среды разработки на Swift низкий рейтинг. Это также связано с ошибками и часто непредсказуемым результатом работы.

Да, у официальной среды разработки от Apple рейтинг всего 2,5 балла
Скриншот: App Store / Skillbox Media

Swift Playgrounds

Swift Playgrounds — приложение для iPad и Mac, предназначенное для изучения Swift и разработки под iOS. В программе обучения есть модули по основам языка программирования, работе с данными, сетью и популярными библиотеками.

Swift Playgrounds для Mac в App Store
Скриншот: App Store / Skillbox Media

Весь процесс обучения подаётся в игровой форме, чтобы материал легче усваивался. А ещё все уроки бесплатные, но на английском языке.

Главный плюс Swift Playgrounds в том, что в приложении есть редактор кода и компилятор, который запускается на iPad. Поэтому научиться разработке под iOS можно даже на недорогом планшете от Apple.

Ресурсы для изучения

Первый и самый важный источник знаний каждого разработчика на Swift — официальная документация от инженеров Apple. В ней максимально подробно описаны все особенности языка и функции библиотек. Для разработчиков, которые знают другие языки программирования, есть быстрый экскурс в особенности Swift. У документации есть русскоязычный перевод, но он актуален для Swift 5.5. Некоторые конструкции языка могут отличаться, поэтому надо сверяться с официальной документацией.

Также разработчики Apple подготовили специальную страницу для тех, кто изучает Swift. На ней собрали ссылки на все материалы, которые могут пригодиться: от кода до дизайна интерфейсов.

Для любителей челленджей в Сети есть бесплатная программа обучения 100 days of Swift. Каждый день предлагается изучать одну тему, решать по ней задачки и тратить на это всего час свободного времени. Главное условие: делиться результатами в социальных сетях. Автор курса считает, что даже самый занятой человек сможет найти один час на программирование, а необходимость ежедневного постинга будет мотивировать не бросать изучение.

На ютуб-канале проекта freeCodeCamp есть семичасовой видеокурс для начинающих. В нём разбираются все темы, необходимые для перехода к разработке iOS-приложений.

Среди русскоязычных авторов чаще всего встречается Василий Усов с уже ставшей классикой книгой «Swift. Основы разработки приложений под iOS, iPadOS и macOS». На сайте книги доступны тесты и задания для самостоятельной проверки пройденного материала.

Дополнительные библиотеки и софт

Если вы твёрдо решили, что хотите стать iOS-разработчиком, то одного Swift будет мало для создания современных приложений для экосистемы Apple. Надо изучать дополнительные библиотеки и инструменты:

  • UIKit и SwiftUI. Для разработки интерфейсов мобильных приложений в экосистеме Swift есть фреймворки UIKit и SwiftUI. Последний актуальнее и востребованнее на рынке, все новые приложения сразу пишут на нём. Однако надо уметь работать и с UIKit, так как ещё не все компании успели переехать.
  • Figma и Sketch. Скорее всего, вы будете верстать экраны приложений по макетам дизайнеров, поэтому надо хотя бы базово уметь работать с Figma и Sketch. Это программы, в которых отрисовывают макет приложения и передают его программистам.
  • Core Data и SwiftData — фреймворки для работы с базами данных на iOS и macOS. SwiftData более современный и пока используется не везде.
  • Системы контроля версий. Сразу учитесь работать с Git, так как чаще всего именно эту систему контроля версий используют в командах разработки.
  • CocoaPods и Swift Package Manager — менеджеры зависимостей и сторонних библиотек. Оба инструмента используются одинаково часто, поэтому надо уметь работать с каждым.
  • App Store Connect. Спустя какое-то время у вас начнут появляться первые приложения, которыми захочется поделиться. Для публикации в магазине приложений Apple надо научиться работать с программой App Store Connect.

Заключение

  • Swift — открытый, компилируемый, мультипарадигменный язык программирования со строгой типизацией, представленный Apple в 2014 году.
  • Его используют для разработки приложений под устройства экосистемы Apple, также на нём можно писать бэкенд и прошивки для IoT-устройств.
  • У Swift относительно простой синтаксис, который легко освоить новичку, однако для разработки серьёзных приложений надо знать много фундаментальных вещей, например ООП, способы управления памятью и принципы сборки проектов с большим количеством файлов.
  • Xcode — интегрированная среда разработки для Swift. В ней есть все необходимые инструменты для компиляции кода, отладки и сборки приложений.
  • Для комфортного программирования на Swift нужен Mac.
  • Простые скрипты можно запускать в онлайн-компиляторах или на iPad.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Изучите основы Python на практике. Бесплатно ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована