Pull to refresh

Comments 10

Хороший альтернативный вариант работы с индексами, спасибо за статью
if let typedCell = cell as? TitledConfigurable, let titled = model as? Titled

При таком подходе очень много лишних операций будет работать.
Так же этот метод разрастется при наличии уже нескольких статичных экранов,
ведь даже на примерах выше много уникальных ячеек.
Лучше тогда сделать подобный StaticDataSourceDelegate для каждого экрана в отдельности, а не делать один на все.


Сомнительная настройка ячеек, опять же разрастется для уникальных ячеек.
Как например будет настраиваться cell.accessoryType, что часто нужно?


Все эти Generic работают только в теории.
На практике выкатывают такие требования, что 10 раз пожалеешь, что их использовал.


п.с.
Тоже задумывался над подобным, но пришел к самому простому решению — просто реализовать стандартные методы. Оказывается самым гибким и легко читаемым решением. Да, есть то что повторяется, но код остается простым, который поймет любой кто его видит в первый раз.


вот парочка примеров: (они не идеальные)
https://github.com/bonyadmitr/XcodeProjects/blob/master/Settings/Settings/Controllers/AboutController.swift
(как раз реализовывает экран выше "О нас", только отличается accessoryType)


https://github.com/bonyadmitr/XcodeProjects/blob/master/Settings/Settings/Controllers/SettingsController.swift

использовать ScrollView + StackView + Views = пара строк кода для всего этого кейса без генетиков и прочего оверхеда
1) Мало переиспользования
2) Нету доступных для таблиц действий (перемещение ячеек, удаление, accessoryType, selection, и так далее.)
3) Неудобно пользоваться через код
1) что подразумевается под «мало переиспользования»? протокол с тремя методами — add, remove, update по модели и/или индексу и полетели
2) есть, в пару действий можно реализовать и перемещение и удаление и все что угодно, но речь идет о статичной (!) таблице, по этому данные кейсы не актуальны и излишни.
Для динамичного контента как раз и придуманы таблицы / коллекции, где так же можно обойтись без неистового оверхеда и генерик оверинжиниринга
3) Неудобно пользоваться через код [X]
???
WHAT ??7

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


проблема при таком случаи это воссоздать все элементы таблицы, чтобы они выглядели как таблица обычная. а это стрелочки, секции, разделители и нажатие на нее. но это справедливо только если в дизайне обычная таблица, что достаточно редко.


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


ну и мини проблема это минимум iOS 9, однако мало кого осталось, кто ее поддерживает ниже нее.


есть вопрос: а можно в StackView просто сделать разные высоты для ячеек без навешивания констрейнта высоты на них, в том же коде?

данный кейс как раз рассматривает использование статичного экрана в табличной верстке, с помощью stack view, можно очень быстро это набросать —
views.forEach { stackView.addArrangedSubview($0) }
достать из xib и сконфигурить не составит труда конечно же. Верстать большую таблицу с помощью stackview — точно такой же антипаттерн.
ну и потом, если использовать для таблицы кастомные ячейки (ячейка с картинкой, полем и свитч — это же насколько огромный получится «универсальный» датасорс).
И для каждого нового типа ячейки — снова создавать свой протокол и ковырять класс
Sign up to leave a comment.

Articles