Курсы

Курсы в разработке Подготовительные курсы
Работа в компаниях Компаниям Блог +7 499 110-61-65
Остановись, мгновение: ловим баги с Breakpoint и Debug Console (LLDB)

iOS_basic_Deep_16.9-5020-156653.png

Первый баг был найден 9 сентября 1945 года. С тех пор их численность увеличилась в разы. Баги заполоняют наши приложения, лишают разработчиков сна, сдвигают сроки сдачи, являются причиной колебания Силы. Пора положить этому конец!

Докажите iOS, что показать UIVIewController вы можете сами!

iOS_Deep_4.9-5020-f7d778.png

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

Combine: 3 примера использования Publishers и Subscriber

ios_deep_22.8-5020-95af92.png

На конференции WWDC 2019 был представлен новый фреймворк Combine. Всё последнее десятилетие среди программистов становились популярными декларативный и Event-based подходы к разработке приложений, т. к. они дают преимущество в скорости разработки приложений.

Как и зачем использовать Labeled Statements в Swift?

iOS_Deep_4.6_site-5020-e3061e.png

Перед написанием данной статьи я спросил в нескольких iOS-чатах про эту фичу Swift, однако никто из iOS-разработчиков вообще(!) не знал о существовании Label Statements.

О чём не задумываются современные программисты Swift 5. Часть 2

ios_deep_21.5_site-5020-959301.png

В предыдущей заметке мы упомянули такие термины, как Expression (Выражение), Statement (Предписание) и Declarations (Объявление), а также подробно поговорили о первом из них. Продолжаем разговор.

Когда, зачем, сколько и для чего писать юнит-тесты

ios_deep_5.9-5020-ac1e29.png

Если подумать, каждая сложная система состоит из большого количества менее сложных частей. Например, у машины есть двигатель, колеса, кресла, руль, стёкла. Все эти части вместе составляют автомобиль, которым можно пользоваться только потому, что все его части правильно работают и хорошо подогнаны друг к другу. Каждая из таких частей на английском языке называется «unit». И это именно тот unit, который тестирует unit-тесты.

Delegate proxy

iOSDeepWelcome21.05_Site.png

Паттерн delegate является одним из самых широко используемых в Cocoa и применяется буквально повсеместно. Многие делегаты, например, UIApplicationDelegate, объявляют внутри себя большое количество методов. И если реализовывать их в одном классе, то класс становится огромным, тяжело читаемым и плохо тестируемым. Так как мы не можем определить больше одного делегата, ситуация кажется безвыходной.

Несколько слов о Dependency Injection

iOSDeep_15.05_Site.png

В реальных приложениях практически каждый класс имеет немалое число зависимостей — других классов, на которые он рассчитывает для осуществления своих задач. Эти зависимости, в свою очередь, могут зависеть от других классов, и т.д.

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

И здесь на помощь приходит паттерн Dependency Injection, или, сокращенно, DI.