Как и зачем использовать 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_30.05_site.png Если подумать, каждая сложная система состоит из большого количества менее сложных частей. Например, у машины есть двигатель, колеса, кресла, руль, стёкла. Все эти части вместе составляют автомобиль, которым можно пользоваться только потому, что все его части правильно работают и хорошо подогнаны друг к другу. Каждая из таких частей на английском языке называется «unit». И это именно тот unit, который тестирует unit-тесты.

Delegate proxy

iOSDeepWelcome21.05_Site.png

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

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

iOSDeep_15.05_Site.png

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

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

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

Null, Nil и пустота

Как мы можем представить программно «ничего»? Например, когда метод ожидает на вход объект, но его нет, а вызов происходит. В программах всё должно быть чётко и понятно, там нельзя сказать «Извините, ничего не пришло».

В языках программирования отсутствие значения – тоже значение! Это означает, что мы можем сравнивать данные с этим «ничем», чтобы проверить: нам на вход был подан объект или подано его отсутствие. Objective C в этом плане не является исключением, так давайте рассмотрим это подробнее.