Всем привет! В этом видео я расскажу вам об организации классов и структур в Swift и, конечно же, о том, как применять их при создании приложений. Классы и структуры — это основные строительные блоки вашей программы. Вы легко можете расширить функционал этих блоков с помощью определения свойств и функций. В отличие от Objective-C в Swift нет разделения на файл описания интерфейса и файл имплементации — весь код пишется в одном файле, а доступ и видимость функций и свойств регулируется при помощи ключевых слов. В Swift класс и структура имеют много общего, поэтому в большинстве случаев я не буду отделять экземпляр структуры от экземпляра классов, которые чаще всего называются объектами. Рассмотрим, что же общего у классов и структур. И классы, и структуры могут определять свойства для хранения значений, могут определять метода для обеспечения функциональности, описывать сабскрипты для обеспечения доступа к значениям с использованием специального синтаксиса, описывать и реализовывать собственные операторы, определять инициализаторы для задания начальных значений, расширять функционал с помощью extensions, а также поддерживать протоколы для реализации описанного функционала. Но есть и отличия. В отличие от структур, классы могут наследоваться от базового класса для получения какого-то базового функционала, использовать деструктор для освобождения памяти, использовать несколько ссылок на один объект благодаря системе подсчета ссылок. Структуры же при присвоении переменной или константе копируются, а не используют ссылки, но об этом мы поговорим чуть позже. Классы и структуры имеют схожий синтаксис для определения. Отличаются они лишь в ключевых словах: в одном случае мы используем ключевое слово struct, а в другом — class. При объявлении структуры или класса определяется новый тип, именовать который принято, используя UpperCamelCase для соответствия используемым в Swift типам. На слайде представлен пример объявления нового класса и новой структуры. Внутри фигурных скобок вы можете описать переменные константы и функции. Переменные могут быть заданы с начальным значением или без него, но в случае отсутствия начального значения оно должно быть присвоено в инициализаторе. Также переменную можно объявить как optional, поставив вопросительный знак после типа, при этом значение по умолчанию у нее будет nil. Объявленные вами типы могут использоваться внутри новых структур и классов. Определение класса или структуры описывает общие признаки, но не сами объекты. Для работы с объектами необходимо создать экземпляр класса или структуры. Пример создания вы можете видеть на слайде. При создании экземпляра происходит вызов функции, в которую также могут быть переданы параметры. Вы можете описать свои инициализаторы для создания объектов с заданными параметрами. После создания экземпляра появляется возможность для доступа к полям этого объекта. Синтаксис очень простой: указываем имя экземпляра, ставим точку и обращаемся к свойству. Если свойство содержит в себе другие свойства, добавляем еще одну точку, указываем имя свойства и так далее. Для обновления значения свойства используется точно такой же синтаксис. В отличие от классов для структур создается специальный инициализатор по умолчанию. При создании инстанса структуры вам необходимо передать значение для всех констант и переменных, значения для которых не заданы по умолчанию. Итак, в этой лекции вы узнали о том, как создаются новые типы в Swift при помощи классов и структур. В следующем же уроке вы узнаете о ключевом отличии классов и структур и о том, какие преимущества это дает вам при разработке.