Объекты и классы

Используйте слово class с именем класса для создания класса. Объявление свойства класса делается так же, как объявление обычной переменной или константы — с тем лишь исключением, что оно теперь находится в контексте класса. Аналогично, методы и функции задаются внутри класса:

Добавьте константное свойство с помощью let; добавьте метод, который принимает аргумент.

Создается объект из класса, используя скобки после имени класса. Используйте синтаксис с точкой для доступа к свойствам и методам объекта:

Эта версия класса Shape не имеет одного важного свойства — инициализатора, который настроит объект при его создании. Используем метод init для этого:


Обратите внимание на то, что для доступа к своим свойствам класс использует self. Аргументы инициализатору передаются так же, как при вызове функции:

Каждое свойство должно иметь значение — заданное или при объявлении (как в случае numberOfSides), или в инициализаторе (как в случае name).

Используйте метод deinit для создания деинициализатора, если нужно перед уничтожением объекта выполнить какую-то очистку.

Классы могут наследоваться. Наследующие классы включают имя суперкласса (их родителя) после своего имени. При этом, классу не обязательно наследоваться от какого-то другого класса (в отличие от Objective-C, где нужно было наследоваться от NSObject — примечание переводчика), в этих случаях имя родителя можно пропустить.

Класс-наследник может определять методы своего родителя, используя слово override — в противном случае, компилятор сообщит об ошибке. Компилятор также определяет методы, которые помечены как override, но на самом деле ничего не переопределяют.

Проиллюстрируем все это с помощью кода:

Создайте другой подкласс NamedShape — например, Circle, который принимает в качестве параметров радиус и имя. Напишите метод area и describe для описания класса Circle

В дополнение к простым хранимым свойствам, свойства могут также иметь getter и setter методы, т.е. методы, используемые для получения и установки их значения.

Например:

В сеттере для свойства perimeter, newValue — это псевдоним для нового значения, которое передается. Можно предоставить другой псевдоним, указав его в скобках после set.

Обратите внимание, что инициализатор для EqualiateralTriangle имеет три разных шага:

  1. Устанавливает значение свойств, объявляемый подклассом;
  2. Вызывает инициализатор класса-предка;
  3. Изменяет значение свойств, объявленных предком.

Любые дополнитеьлные действия так же можно сделать на последнем шаге.

Если вам не нужно вычислять свойство, но по прежнему нужно предоставить код, который будет запущен до и после получения нового значения, используйте willSet и didSet. Например, класс ниже проверяет, что длина стороны треугольника всегда такая же, как длина стороны квадрата:

Методы в классах имеют одно важное отличие от функций. Имена параметров в функциях используются только внутри функции, но имена параметров в методах используются так же при вызове метода (кроме первого параметра). По умолчанию, метод имеет одно и то же имя параметра при вызове и внутри самого метода. Но можно указать второе имя, используемое в самом методе:

Работая с опциональными значениями, вы можете написать ? перед операциями типа методов, свойств и обращений к элементам массива или словаря. Если значение перед ? — nil, то все после ? игнорируется и значение всего выражения — nil. Иначе, опциональное значение используется для вычисления выражения. В обоих случаях, значение всего выражение также является опциональным значением:


Просмотренно: 2 726 раз