Вы находитесь на странице: 1из 7

КЛАССЫ

Напоминание
• struct (структура) – в Java отсутствует
• Value type - ключевое отличие от class, в остальном много схожестей
• Многие встроенные типы являются структурой (String, Int, Dictionary, Array и пр.)
• Поддерживает не все принципы ООП

• class (класс)
• Reference type
• Более сложные объекты
• Поддерживает все принципы ООП

• enum (перечисление) - отличается по смыслу, будем проходить отдельно


• Value type
• Набор ограниченных значений
Заметки
• struct – «проще», чем класс – когда нужно просто создать обертку для определенных данных, не связанную с другими объектами (т.е. не
требуется наследование и пр.)

• Отличия сlass от struct:


• Не создается автоматически memberwise initializer
• Поддержка наследования
• Деинициализация
• Работа инициализаторов
• Приведение типов
• Reference type
• Не требует mutating перед методом для изменения instance property (mutating нужен для value types: struct and enum)

• Если нужен ссылочный тип (чтобы несколько переменных могли ссылаться на один объект, например при передаче в параметр метода) –
используйте класс

• Для Java разработчиков более привычна концепция класса, а не структуры, т.к. поведение похоже на Java классы
init
• В отличии от struct – в Java более сложная схема работы с инциализаторами (из-за возможностей наследования классов, т.к. struct
наследование не поддерживает)

• Класс не создает автоматически memberwise initializer (заполняет все свойства), как это было в struct
• Класс может создавать default initializer, при условии что все свойства при объявлении принимают значения по-умолчанию

• Понятия:
• Designated initializer (главный, определяющий) – задает все свойства
• В классе должен быть хотя бы один designated initializer
• Принимает параметры и задает значения всех пустых свойств
• Не может вызывать convenience init или designated init из этого же класса (через self)
• Может (должен, если есть родительский класс) вызывать только родительский designated init (через super)

• Convenience Initializer (удобный, комфортный)


• Второстепенный init, необязательно добавлять в класс, по желанию
• Позволяет создавать init с любыми удобными параметрами, т.е. является более гибким по сравнению с designated init
• Может вызывать другой convenience init (которые могут вызывать друг друга по цепочке)
• В итоге все равно обязательно должен быть вызван какой-либо designated init, который заполнит все пустые свойства
• Не может вызывать через super какой-либо родительский init
init
Сравнение ссылок
• Оператор «===» проверяет, ссылаются ли переменные на один экземпляр – работает для reference type
• !== отрицание

• Оператор «==» проверяет, равны ли значения – работает для value type


• != отрицание
Домашнее задание
• Выполнить Hometask

• Прочитать (повторно):
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStruc
tures.html

Оценить