All streams
Search
Write a publication
Pull to refresh
12
0
Евгений Казаев @spiceginger

IOS разработчик

Send message
Некоторые рекомендации я нахожу излишними для массмаркета. Разве что для банк клиента. Ну какой пин при запуске? Все пользователей енгеджат всеми силами, а вы предлагаете им пин вводить при запуске.
Но в целом — хорошая обзорная статья которую хорошо иметь под рукой.
Спасибо
Как возникнет в следующий раз — сделаю. Это точно стало происходить реже в последние месяцы.
Хочу сказать спасибо за AppCode, это самые продуктивные 6 евро которые я трачу в месяц. Если бы вы еще добавили возможность принудительной переиндексации проекта — было бы здорово. У нас большой проект состоящий из нескольких фреймворков и очень часто возникает ситуация, что, после нескольких переключений бранчей в гит, индексация проекта слетает и приходится закрывать и открывать AppCode снова.

Точнее можно, но тогда роутер не сможет вам гарантировать никакого привидения типов. Придется взеде сказать что это Any? и в фабриках проверять тип вручную, или использовать Dictionary контекст и бросать эксепшен если в нем не хватает чего то что нужно одному из вью контроллеров в цепочке.


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

Грубо говоря да. Или в связке где все экраны хотят nil и ни в коем случае что то иное. Наверное, такое тоже имеет место быть.


Тут следует еще уточнить логику работы роутера, мне не хотелось вдаваться в подробности в статье.


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

Но, кстати, щас подумал — Void наложит еще одно ограничение.


Допустим у вас конфиграция (образно):


UINavigationContoller<Any?> -> ProductListViewController<Void> -> ProdictViewContoller<String>

И допустим пришла вам универсальная ссылка с айди продукта и вы хотите построить именно в такой конфигурации. Роутер не обработает такую конфигурацию со стрингом в контексте, потому что ProductListViewController говорит что ему что бы быть построенным контекст должен быть nil и точка. В случае же с Any? такая цепочка будет валидной так как ProductListViewController в общем то все равно что там может быть передано для предыдущих и последующих вью контроллеров. Он явно указывает на это роутеру.

Тут все совершенно верно. Но в наших приложениях всегда присутствует некий контекст который содержит в себе помимо данных для построения вью контролера (или отсутствия таковых) обязательные поля для аналитики которые продиктованы протоколами. Какие то должны быть заполнены в ручную, какие то заполняется делегатами того же `UINavigationController`-а, что бы отслеживать перемещение пользователя в приложении (в том числе когда он делает тот же свайп бэк) и потом все это автоматически (и не очень) сабмитится в аналитику, поэтому если мы хотим сказать что там точно что то будет и кто то это будет обрабатывать, но самому вью контролеру все равно — мы используем Any?.. Пожалуй, в качестве абстрактного примера и правда стоит отметить в статье, что при желании можно использовать Void

Хороший вопрос. Если вы хотите сказать что это именно nil и ничего больше — используйте Void. Но этот тип не подходит для контейнеров (в тот же UINavigationController) так как в них может быть встроен вью контроллер которому потребуется некий отличный от nil объект и рутер не сможет построить цепочку так как контейнер будет четко указывать роутеру что он может быть построен исключительно с nil и все его внутренние вью контроллеры в том числе.


Any? является универсальным, сообщая роутеру что он может игнорировать в данном конкретном случае проверку типов. Но для вашего конечного вью контроллера вы можете использовать Void

12 ...
10

Information

Rating
Does not participate
Location
Dublin, Dublin, Ирландия
Date of birth
Registered
Activity