Comments 9
Я сомневаюсь, что этот подход упростит разработку и, уж тем более, отладку приложения. Опровергните мои сомнения, пожалуйста.
0
Таким образом можно писать меньше кода, за счет чего повышается читаемость и скорость разработки. Возможность организовать обработку событий рядом с конфигурацией контролов (И не только, что-то подобное мы применяем и для нотификаций клавиатуры). Что касается отладки, то брейк поинты работают в замыканиях, но в стек трейсе появится парочка новых вызовов.
0
Вот в той части вашего утверждения где «можно писать меньше кода» — ну сразу же видно, что кода гораздо больше. И он запутанней. Может читаемость кода в данном конкретном файле улучшается, но для этого приходится жертвовать не маленьким таким объемом дополнительного кода который надо писать под каждое замыкание.
0
Кажется, это нормально — один раз пишем обертку, что бы в будущем использовать ее во многих местах. Можно не писать ее самому, а добавить готовый под HandlersKit. В статье я объясняю, как он работает.
0
Идея понятна, только вот iOS SDK полностью завязан на делегатах, и большинство разработчиков так и привыкло с этим работать, и сразу поймет где смотреть методы делегата UITextField и как они работают. В данном случае вы оборачиваете колбэки от делегатов в замыкания, и код в ObserverHolder сложно читаемый. Плюсы, подхода, конечно видны, но вы по сути отклоняетесь от принятого стиля написания кода.
0
Согласен, что обработка ивэнтов в замыканиях более читаема. Проблема в том, что UIKit построен с использовании императивного подхода к созданию графического интерфейса, а представленной реализацией мы пытаемся перейти на использование декларативного подхода. Стоит ли плыть против течения? Но это совсем другой вопрос. Спасибо за статью!
+1
Выглядит интересно.
Есть пара комментариев:
- Как мне кажется, для пода было бы правильнее не добавлять методы прямо к типам из UIKit, а воспользоваться дополнительной структурой для организации пространства имён. В качестве примеров могу привести
Reactive
из RxCocoa иAlamofireExtension
. - В отличии от target-action, delegate всегда один, в один момент времени. Два разных замыкания не могут обрабатывать одно и то же событие. А подход к настройке абсолютно одинаковый. Возможно стоит явно выразить этот нюанс в API.
0
Sign up to leave a comment.
Как заменить target-action и delegate замыканиями