Использование декларативного программирования в UIKit
Википедия определяет цепочку методов как:
Связывание методов, также известное как идиома именованных параметров, представляет собой распространенный синтаксис для вызова нескольких вызовов методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединять вызовы в единую инструкцию, не требуя переменных для хранения промежуточных результатов.
Скорее всего, большинство из нас уже использовали цепочку методов в какой-то момент.
Но здесь я хочу поговорить об особом типе этих функций, возвращающих объекты, которые returns Self
.
Давайте погрузимся на примере.
В приведенном выше фрагменте создается объект UIButton
, который, в свою очередь, используется для установки атрибутов кнопки, таких как цвет фона/заголовка, текст заголовка кнопки и т. д. Наконец, к нему добавляется целевое действие.
Теперь давайте посмотрим, как здесь могут помочь Self
возвращающие функции.
Приведенный выше фрагмент кода представляет собой расширение UIButton
с парой функций. Каждое из этих функциональных тел в основном устанавливает один или несколько атрибутов кнопки. Если вы заметили, все функции здесь имеют две общие черты:
- Все они отмечены атрибутом
@discardableResult
. Это делается для того, чтобы подавить предупреждение компилятора, поскольку в большинстве случаев мы не будем явно хранить/использовать возвращаемое значение этой функции. Вы увидите это через некоторое время. - Все они имеют возвращаемый тип
Self
. Это то, что позволяет нам связывать вызовы функций.
Итак, давайте воспользуемся этими функциями.
Каждый раз, когда мы редактируем атрибут кнопки с помощью объявленных выше функций, мы получаем объект кнопки в качестве возвращаемого значения, которое, в свою очередь, может использоваться для вызова новой функции.
Кроме того, в большинстве случаев нам даже не нужно объявлять переменную для ее хранения (если, конечно, вы не захотите позже отредактировать атрибуты кнопки).
Возьмем, к примеру, мы добавляем эту кнопку в файл StackView
. Вы можете просто определить это внутри массива arrangedSubviews
, как показано ниже.
Классы UIKit в сочетании с этими красивыми и простыми расширениями упрощают создание декларативного пользовательского интерфейса.
Этот тип цепочки методов не ограничивается классами UIKit и может быть связан с любым типом класса. Одним из таких широко используемых примеров является API запросов Alamofire.