Как стать автором
Обновить

Комментарии 9

Я сомневаюсь, что этот подход упростит разработку и, уж тем более, отладку приложения. Опровергните мои сомнения, пожалуйста.
Таким образом можно писать меньше кода, за счет чего повышается читаемость и скорость разработки. Возможность организовать обработку событий рядом с конфигурацией контролов (И не только, что-то подобное мы применяем и для нотификаций клавиатуры). Что касается отладки, то брейк поинты работают в замыканиях, но в стек трейсе появится парочка новых вызовов.
Вот в той части вашего утверждения где «можно писать меньше кода» — ну сразу же видно, что кода гораздо больше. И он запутанней. Может читаемость кода в данном конкретном файле улучшается, но для этого приходится жертвовать не маленьким таким объемом дополнительного кода который надо писать под каждое замыкание.
Кажется, это нормально — один раз пишем обертку, что бы в будущем использовать ее во многих местах. Можно не писать ее самому, а добавить готовый под HandlersKit. В статье я объясняю, как он работает.
Ага, вод про pod и хотелось уточнить, но вы уже объяснили. В таком случае, попробовать стоит, однозначно.
Идея понятна, только вот iOS SDK полностью завязан на делегатах, и большинство разработчиков так и привыкло с этим работать, и сразу поймет где смотреть методы делегата UITextField и как они работают. В данном случае вы оборачиваете колбэки от делегатов в замыкания, и код в ObserverHolder сложно читаемый. Плюсы, подхода, конечно видны, но вы по сути отклоняетесь от принятого стиля написания кода.
Устаревшего стиля доставшегося со времён objc.
Согласен, что обработка ивэнтов в замыканиях более читаема. Проблема в том, что UIKit построен с использовании императивного подхода к созданию графического интерфейса, а представленной реализацией мы пытаемся перейти на использование декларативного подхода. Стоит ли плыть против течения? Но это совсем другой вопрос. Спасибо за статью!

Выглядит интересно.


Есть пара комментариев:


  1. Как мне кажется, для пода было бы правильнее не добавлять методы прямо к типам из UIKit, а воспользоваться дополнительной структурой для организации пространства имён. В качестве примеров могу привести Reactive из RxCocoa и AlamofireExtension.
  2. В отличии от target-action, delegate всегда один, в один момент времени. Два разных замыкания не могут обрабатывать одно и то же событие. А подход к настройке абсолютно одинаковый. Возможно стоит явно выразить этот нюанс в API.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий