Использование декларативного программирования в UIKit

Википедия определяет цепочку методов как:

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

Скорее всего, большинство из нас уже использовали цепочку методов в какой-то момент.
Но здесь я хочу поговорить об особом типе этих функций, возвращающих объекты, которые returns Self.

Давайте погрузимся на примере.

В приведенном выше фрагменте создается объект UIButton, который, в свою очередь, используется для установки атрибутов кнопки, таких как цвет фона/заголовка, текст заголовка кнопки и т. д. Наконец, к нему добавляется целевое действие.

Теперь давайте посмотрим, как здесь могут помочь Self возвращающие функции.

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

  1. Все они отмечены атрибутом @discardableResult. Это делается для того, чтобы подавить предупреждение компилятора, поскольку в большинстве случаев мы не будем явно хранить/использовать возвращаемое значение этой функции. Вы увидите это через некоторое время.
  2. Все они имеют возвращаемый тип Self. Это то, что позволяет нам связывать вызовы функций.

Итак, давайте воспользуемся этими функциями.

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

Кроме того, в большинстве случаев нам даже не нужно объявлять переменную для ее хранения (если, конечно, вы не захотите позже отредактировать атрибуты кнопки).

Возьмем, к примеру, мы добавляем эту кнопку в файл StackView. Вы можете просто определить это внутри массива arrangedSubviews, как показано ниже.

Классы UIKit в сочетании с этими красивыми и простыми расширениями упрощают создание декларативного пользовательского интерфейса.

Этот тип цепочки методов не ограничивается классами UIKit и может быть связан с любым типом класса. Одним из таких широко используемых примеров является API запросов Alamofire.