Сёрф iOS-разработка
1.34K subscribers
384 photos
25 videos
95 links
Download Telegram
Расширяемые ячейки

UITableView часто применяется для вёрстки списков. Однако не все знают, что этот элемент не поддерживает автоматическое изменение размера ячейки.

Представим, что нам дали задание добавить в список на UITableView ячейку, высота которой будет:
🔹увеличиваться на 50 пунктов по нажатию,
🔹уменьшаться до исходного значения при повторном нажатии.

Добавим кнопку, привяжем её края к краям ячейки и вынесем constraint высоты для обработки изменений.

Менять высоту будем тривиальным кодом buttonHeightConstraint.constant += isSmall ? 50 : -50. Полный код ячейки — на картинке ExpandableTableCell-1.

Запускаем приложение: что получится, видно на первой картинке. Изменения к высоте заметны только после прокрутки списка, то есть при переиспользовании ячейки.

Как заставить UITableView реагировать на изменения constraint-высоты сразу же?

Нужно вызвать функцию UITableView.performBatchUpdates(nil) после изменения constraint. Это заставит UITableView пересчитать высоту ячеек и отобразить изменения анимировано.

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

Однако использование этого метода изнутри ячейки требует поиск инстанса UITableView, что возможно лишь через копирование или рекурсивный поиск. Пример рекурсивного поиска — на картинке ExpandableTableCell-2.

Чтобы не копировать код поиска UITableView, мы создали протокол ExpandableItem и спрятали необходимый вызов за абстрактным ивентом.

Просто добавьте ячейке реализацию этого протокола и вызовите onHeightChanged.invoke(with: nil) в момент изменения высоты. Остальное RDDM сделает за вас. Пример использования ExpandableItem — на картинке ExpandableTableCell-3.

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

Чтобы узнать больше про возможности RDDM, переходите в репозиторий проекта: там есть ExampleApp с примерами использования библиотеки и её фич, таких как ExpandableItem.
🔥10👍4
Давай познакомимся поближе. Мы хотим развивать канал и понимать, какой контент больше подойдёт аудитории. Пожалуйста, ответь на пару вопросов.

1. Какой у тебя грейд?
Anonymous Poll
49%
Trainee
27%
Junior
15%
Middle
9%
Senior
👍1
Ищем стажёра в нашу команду 🏄‍♂️

Стажировка в Surf — крутая возможность проявить скиллы в разработке и поработать на иностранных проектах. Мы за развитие и карьерный рост — трудоустроим лучших и будем прокачивать их грейд.

Что делают в Surf для стажёров:

• Платят стипендию;
• Строят гибкий график;
• Подключают опытного наставника;
• Обеспечивают современным железом.

Смотри требования к будущим iOS-стажёрам на карточках. Если твои скиллы подходят, то отправляй заявку на стажировку — вышлем тестовое задание, которое нужно выполнить до 12.02 включительно.

Собрали материалы, которые помогут при подготовке к стажировке:

Список полезной инфы для iOS-разработчиков.
Советы новичкам в iOS-разработке.
Как проходят стажировки в Surf.
🔥12🤩3🎉2👍1
Наш опенсорс: NodeKit — библиотека для работы с сетью

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

Мы в Surf решили сделать сетевой слой переиспользуемым и легко кастомизируемым. Для этого создали NodeKit — гибкую и полностью кастомизируемую open-source библиотеку для работы с сетью.

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

Важные особенности библиотеки
Возможность добавить параметры извне. Это позволяет обходить нужные узлы.
Возможность реализовать нескольких цепочек обработки запроса. Например, если необходимо реализовать разную логику для авторизованного и неавторизованного пользователя, то можно создать несколько цепочек запросов и собрать их с помощью билдера.
Большое количество готовых узлов, которые позволяют не тратить время на базовую реализацию сетевого слоя и использовать NodeKit прямо из коробки.

NodeKit используется в большинстве iOS-приложений в Surf: с помощью него мы можем быстро и качественно реализовывать сетевой слой.

Дефолтный сетевой слой, а также модели к нему можно реализовать с помощью SurfGen. Но об — этом в следующих постах.

🔗 NodeKit

🔗 SurfGen
👍8🔥7👏3
Не проводите код-ревью на голодный желудок!
Или немного о том, как устроен процесс код-ревью в Surf

Процесс код-ревью в Surf есть! А если без шуток, в разных командах он проходит немного по-разному и зависит от разных факторов. О них и поговорим.

1️⃣ Размер команды
В небольшой команде из двух-трёх человек каждый разработчик проводит ревью каждого пул-реквеста.

Это:
повышает качество проекта,
помогает прокачать технически менее опытных разработчиков,
даёт возможность познакомить участников команды с кодом друг друга,
приводит к затратам ресурсов: отнимает довольно много времени.

В команде от четырёх человек и больше такое не сработает: как раз из-за временных затрат. Поэтому количество участников ревью ограничено: их может выбрать лид или создатель пул-реквеста.

2️⃣ Жизненный этап проекта
Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. В этой ситуации можно воспользоваться таким понятием, как «технический долг» 😉

Если фичу надо отдать срочно и возможности перенести дедлайн нет, нужно запомнить то, что сделано «плохо»: зафиксировать это в техническом долге, а после релиза вернуться и исправить.

3️⃣ На что обращаем внимание в процессе код-ревью
🔹 общепринятые проектные договоренности,
🔹 соблюдение архитектурных правил,
🔹 грамотное разделение ответственностей,
🔹 соблюдение принципов программирования,
🔹 соблюдение code-style.

Проверять ли код на «правильность выполнения»? Об этом много споров. Наши техлиды проверяют.

Да, это отнимает много времени, но позволяет отсечь большинство багов ещё до попадания сборки к QA: это экономит время и QA, и разработчиков. Ведь чем раньше исправлен баг, тем меньше «стоимость» его исправления.
👍5
Код-ревью в прямом эфире 👨‍💻
Наши iOS-разработчики разберут твой код 🧐

🗓 21 февраля, вторник
🕓 19:00 мск
📍 Telegram-канал Surf iOS Team

Код-ревью — это клёвая возможность прокачаться: получить критику от более опытных коллег, улучшить код и узнать неочевидные нюансы его создания.

Мы приглашаем тебя поучаствовать: в роли того, чей код будут разбирать, или в роли зрителя. Решать тебе.

🤓 Хочу, чтобы разобрали мой код
Тогда присылай отклик в эту форму: ждём от тебя ссылку на гитхаб.

Мы выберем несколько проектов и будем ревьюить их в прямом эфире.

😎 Хочу послушать, как критикуют других
Тогда приходи в наш канал 21 февраля в 19:00 и подключайся к эфиру.

До встречи!
👍10🔥3👏2
Начинаем эфир! Вопросы оставляй в комментах под этим постом 😉
🔥4👍1
Live stream finished (1 hour)
Media is too big
VIEW IN TELEGRAM
Выкладываем запись эфира с код-ревью для тех, кто вчера не успел 👀

Всем ещё раз спасибо, было круто! В следующий раз постараемся разобрать больше проектов и сделать эфир поактивнее.

Если вопросы остались, ждём в комментариях, ответим. Будем также рады любой обратной связи 😌
👍14🔥6👏2