Есть образ docker с Xcode, но как я понимаю там происходит проксирование в host систему. Суть контейнеров при этом теряется.
Для macOS существует проприетарная и платная альтернатива docker — anka build. Работает на основе Hypervisor.framework
Да, я забыл сказать, что у main thread runloop будет запущен. Runloop не будет создан на других потоках (созданных вручную или используемых глобальными очередями GCD)
Примеры из публикации корректны, я просто дополнил
у каждого потока ест автоматически созданный для него цикл выполнения
Насколько мне известно runloop будет создан у потока, только после вызова currentRunLoop (класса Runloop) на этом потоке. Если не сделать этого и не вызвать run() у currentRunLoop то таймер на этом потоке работать не будет.
Кусочек оригинального текста проскочил:
updateAnimation() is now called every time the animation timer fires.
Мощная статья! Тема раскрыта, интересно почитать, даже зная большую часть изложенного.
Добавлю ссылку на playground, в котором тоже неплохо объясняется что такое optionals, и как можно реализовать свой аналог.
Во-вторых, Presenter выступает в качестве Input и Output модуля. В-третьих, он не просто передает команды от View к Interactor и т.д., а принимает решения
Это же нарушает принцип Single Responsibility. Столько обязанностей у одной сущности.
Но на самом деле это неизбежно, должен же быть класс, который никак не переиспользовать при изменении требований.
Вопрос к знатокам VIPER:
Недавно делал одну функциональность для проекта на VIPER. Компонент представлял собой UITableView c двумя секциями с возможностью перетаскивания ячеек.
Для удобства разместил алгоритм перетаскивания в UITableViewDelegate непосредственно в слое View. Это допустимо или следовало бы прокидывать вызовы делегата до интерактора и обратно во View?
Интересно узнать чуть больше о лентах. Заказал из Китая RGBW ленты для декоративной/дополнительной подсветки комнаты по периметру потолка. Для целей неосновного освещения они пригодны?
Не нашел в статье ничего по поводу захвата блоком self и связанных с этим опасностей. Мне кажется обязательно нужно знать про передачу weak self в блок, когда начинаешь использовать блоки.
Для macOS существует проприетарная и платная альтернатива docker — anka build. Работает на основе Hypervisor.framework
Примеры из публикации корректны, я просто дополнил
Небольшое уточнение:
Насколько мне известно runloop будет создан у потока, только после вызова currentRunLoop (класса Runloop) на этом потоке. Если не сделать этого и не вызвать run() у currentRunLoop то таймер на этом потоке работать не будет.
Кусочек оригинального текста проскочил:
Добавлю ссылку на playground, в котором тоже неплохо объясняется что такое optionals, и как можно реализовать свой аналог.
Это же нарушает принцип Single Responsibility. Столько обязанностей у одной сущности.
Но на самом деле это неизбежно, должен же быть класс, который никак не переиспользовать при изменении требований.
Вопрос к знатокам VIPER:
Недавно делал одну функциональность для проекта на VIPER. Компонент представлял собой UITableView c двумя секциями с возможностью перетаскивания ячеек.
Для удобства разместил алгоритм перетаскивания в UITableViewDelegate непосредственно в слое View. Это допустимо или следовало бы прокидывать вызовы делегата до интерактора и обратно во View?