Pull to refresh
51
-0.3
Юрий @infund

Пользователь

Send message
Да, ценное замечание. Эта возможность появилась в Swift 5.0, а оригинал статьи писался под 4.2
EFEKTA. В отделе выдумывания названий товаров ИКЕА рвут на себе волосы.
Теперь ждём, когда заново откроют сложение!
Рад, что публикация оказалась полезной!
Это высшая степень упрощения замыкания — перемножение его на ноль! ) Как вариант ответа — вполне допустим, я думаю.
Учимся правильно корчить рожи на камеру

Жаль, что по Свифту на хабре мало столь же полезных публикаций, как эта.
Вполне может быть и так ))
У Моторолы Razr была еще реклама с приблизительно следующим сюжетом, насколько помню: пляж, солнце, всюду полуобнаженные ленивые тела, никакой одежды, где можно было бы спрятать свою мобилу. Вдоль линии моря идёт девушка в бикини. И тут шок: звонок сотового потряс окрестности! Все в недоумении: «Но как???» И девушка небрежно открывает свой Razr. ))
Понимаю, что музей. Но в публикации явно не хватает «потрохов» экспонатов )
Родственники!
Может быть, будет интересно — написал реализацию решета на Swift. Собственно «решето» — три строчки в цикле while, включая условие выхода.
Была исходная статья — решето на дельфях, процедурная реализация, простыня. Я написал реализацию в три строчки. Вот и вся демонстрация. Считаю, исчерпывающая. Замеры времени — просто для ориентировки, скажем, я ни на секунду не сомневаюсь, что в дельфях, при прочих равных, крутиться будет быстрее.
Код написан ясно, откомментирован и изначально без претензии на первые места в конкурсе на скорость поиска простых чисел.

Какие возможности показаны? Циклы, массивы и замыкания?

Показаны возможности, достаточные для решения конкретной задачи наименьшим количеством кода. Фильтров не показал, да.
Спасибо за комментарий, но я изначально не гнался за эффективностью выполнения. Да, звучит странно, согласен. Скорее, это программирование ради программирования и демонстрация возможностей Swift. Зато тут вся реализация заключена в трех строчках в цикле while, включая условие выхода. Да, и такие простыни хорошо бы в спойлер.
И насчёт тормозов. Может и так, как вы говорите, но тормоза возникали еще на этапе цикла, когда справа отображалось количество исполнений. До отображения результатов.

Хотя и стало немного многословнее, да.

Да как следует многословнее стало, да.
Да, неплохая оптимизация! Обновил публикацию.
«Из коробки» у таймера нет функционала pause/resume. Из этого следует вывод, что на «паузе» нужно делать invalidate() (если он добавлен в RunLoop) и обнулять его, а на «возобновить» — создавать его вновь, учитывая состояние, в котором он был в момент паузы.
Спасибо, огрехи поправил! Что касается RunLoop, то пример, рассматриваемый в оригинальной публикации, вполне рабочий, я его повторил, конечно.
А чуть ниже, в том же разделе написано:

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


Посмотрите повнимательнее логику создания таймера и метод, который который он вызывает при срабатывании, все станет ясно.
Там и есть только один таймер, который обновляет временные метки всех задач.
Полагаю, на собеседовании достаточно ответить скучно — так, как о Stored Property написано в официальном руководстве.

Extensions

Extensions can add new computed properties, but they cannot add stored properties, or add property observers to existing properties.

Information

Rating
Does not participate
Registered
Activity