This media is not supported in your browser
VIEW IN TELEGRAM
Продвинутые анимации в SwiftUI
📖 В цикле статей авторы погружаются в некоторые продвинутые техники создания анимации SwiftUI. Подробно рассказывается о протоколе
Все эти темы не слишком хорошо описаны в официальной документации и не очень часто упоминаются в постах и статьях о SwiftUI.
Тем не менее, они предоставляют нам инструменты для создания довольно красивых анимаций.
1️⃣ Часть первая — Paths.
2️⃣ Часть вторая — GeometryEffect.
3️⃣ Часть третья — AnimatableModifier.
🛠 Все статьи насыщены примерами, а исходный код можно найти на гитхабе.
@iOS Dev
📖 В цикле статей авторы погружаются в некоторые продвинутые техники создания анимации SwiftUI. Подробно рассказывается о протоколе
Animatable
, его верном спутнике animatableData
, мощном и часто игнорируемом GeometryEffect
и протоколе AnimatableModifier
.Все эти темы не слишком хорошо описаны в официальной документации и не очень часто упоминаются в постах и статьях о SwiftUI.
Тем не менее, они предоставляют нам инструменты для создания довольно красивых анимаций.
1️⃣ Часть первая — Paths.
2️⃣ Часть вторая — GeometryEffect.
3️⃣ Часть третья — AnimatableModifier.
🛠 Все статьи насыщены примерами, а исходный код можно найти на гитхабе.
@iOS Dev
👍21🔥13
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏
📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке.
📖 В этой статье рассказывается про один из подходов.
Что НЕ следует делать
🔴 Показывать алерт при запуске.
🔴 Показывать его слишком рано.
🔴 Показывать при любом общем для всех действии.
Стратегии получения максимальной отдачи
🟢 Ориентироваться на уникальное действие в приложении.
🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении.
🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например:
— Открытие твита 1 балл.
— Лайк твита 3 балла.
— Создание твита 5 баллов.
Если пользователь достигнет нужного порога — показываем запрос.
🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.
@iOS Dev
📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке.
📖 В этой статье рассказывается про один из подходов.
Что НЕ следует делать
🔴 Показывать алерт при запуске.
🔴 Показывать его слишком рано.
🔴 Показывать при любом общем для всех действии.
Стратегии получения максимальной отдачи
🟢 Ориентироваться на уникальное действие в приложении.
🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении.
🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например:
— Открытие твита 1 балл.
— Лайк твита 3 балла.
— Создание твита 5 баллов.
Если пользователь достигнет нужного порога — показываем запрос.
🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.
@iOS Dev
👍12🔥2
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков.
Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь.
Для Swift
❤️ 63% любят этот язык,😱 37% считают его неприятным.
💵 Медианная зарплата составляет $ 78 468 в год.
Для Objective-C
❤️ 24% любят, 😱 76% считают его неприятным.
💵 Медианная зарплата $ 83 165 в год.
Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов.
Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень.
Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.
@iOS Dev
Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь.
Для Swift
❤️ 63% любят этот язык,😱 37% считают его неприятным.
💵 Медианная зарплата составляет $ 78 468 в год.
Для Objective-C
❤️ 24% любят, 😱 76% считают его неприятным.
💵 Медианная зарплата $ 83 165 в год.
Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов.
Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень.
Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.
@iOS Dev
👍18🔥5❤2😱2
Применение default для подсчёта количества символов в строке
Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях.
Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом
🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs».
💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.
@iOS Dev
Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях.
Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом
default
.🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs».
💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.
@iOS Dev
👍37🔥4
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU
Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой.
Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь!
🤔 Что такое CPU Exceptions в iOS?
Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго.
Однако в фоне вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды.
Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение.
Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор".
📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.
@iOS Dev
Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой.
Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь!
🤔 Что такое CPU Exceptions в iOS?
Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго.
Однако в фоне вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды.
Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение.
Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор".
📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.
@iOS Dev
👍14🔥2
Простой способ подсчитать количество строк в ваших Swift-файлах
Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods):
Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.
@iOS Dev
Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods):
find . -path ./Pods -prune -o -name '*.swift' -print0 ! -name '/Pods' | xargs -0 wc -l
Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.
@iOS Dev
👍20👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Субботний опенсорс
🛠 Полезный репозиторий с реализацией нескольких сортировок.
Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort).
Используется Swift Playgrounds.
@iOS Dev
#opensource
🛠 Полезный репозиторий с реализацией нескольких сортировок.
Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort).
Используется Swift Playgrounds.
@iOS Dev
#opensource
👍18🔥3
Различные способы перехвата ошибок в Swift при использовании do-catch
Конечно, заманчиво просто поймать все ошибки с помощью единственного
👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения
📖 В этой статье автор рассматривает различные способы перехвата из
@iOS Dev
Конечно, заманчиво просто поймать все ошибки с помощью единственного
catch
и на этом закончить, но не все ошибки одинаковы, и вы должны относиться к ним именно так.👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения
catch
. Они будут легко читаться, пониматься и соответствовать потребностям вашего вашего приложения.📖 В этой статье автор рассматривает различные способы перехвата из
throw
-функций. Кроме этого, описываются типы этих функций и разбирается, что в них используется для разделения каждого catch
.@iOS Dev
👍21
Clean Architecture и MVVM в iOS: пример реализации проекта
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
@iOS Dev
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
@iOS Dev
👍25🔥4🤯3❤2😱1
This media is not supported in your browser
VIEW IN TELEGRAM
Когда скопировал два решения со StackOverflow
На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом).
По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2».
😅 Иногда хочется поделиться не только серьёзными вещами.
@iOS Dev
На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом).
По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2».
😅 Иногда хочется поделиться не только серьёзными вещами.
@iOS Dev
😁34👍3🤩2😱1
PhotosPicker: инструмент выбора фотографий с помощью SwiftUI и Transferable
📖 В этой статье рассказывается, как использовать новый SwiftUI PhotosPicker API, о котором было объявлено на одной из сессий #WWDC.
Новый SwiftUI PhotosPicker API доступен на всех платформах:
⚪ iOS (16.0+)
⚪ iPadOS (16.0+)
⚪ macOS (13.0+)
⚪ watchOS (9.0+)
Больше не нужно использовать
Также приложению не нужно запрашивать доступ к библиотеке, чтобы использовать его.
Кстати, пикер автоматически выберет оптимальный макет в зависимости от платформы, конфигурации и доступного пространства экрана. Не нужно беспокоиться о пользовательском интерфейсе, а время можно потратить на улучшение приложения.
Для внедрения нужны два шага:
1️⃣ Использовать
2️⃣ Загрузить данные об объекте с помощью
@iOS Dev
📖 В этой статье рассказывается, как использовать новый SwiftUI PhotosPicker API, о котором было объявлено на одной из сессий #WWDC.
Новый SwiftUI PhotosPicker API доступен на всех платформах:
⚪ iOS (16.0+)
⚪ iPadOS (16.0+)
⚪ macOS (13.0+)
⚪ watchOS (9.0+)
Больше не нужно использовать
UIViewControllerRepresentable
для обертывания PHPickerViewController
или его старой версии UIImagePickerController
.Также приложению не нужно запрашивать доступ к библиотеке, чтобы использовать его.
Кстати, пикер автоматически выберет оптимальный макет в зависимости от платформы, конфигурации и доступного пространства экрана. Не нужно беспокоиться о пользовательском интерфейсе, а время можно потратить на улучшение приложения.
Для внедрения нужны два шага:
1️⃣ Использовать
PhotosPicker
для получения одного или нескольких экземпляров PhotosPickerItem
.2️⃣ Загрузить данные об объекте с помощью
PhotosPickerItem.loadTransferable
.@iOS Dev
👍12🔥4
Написал небольшой пост о Deque, что это вообще такое, а также о некоторых её плюсах. Ну и о минусах тоже, конечно.
@iOS Dev
@iOS Dev
Telegraph
Deque в Swift, её преимущества и недостатки
Deque (произносится как "дек", не декью и не декуе) работает так же, как и Array: это упорядоченная, с произвольным доступом, изменяемая, заменяемая по диапазону коллекция с целочисленными индексами. Основное преимущество Deque перед Array заключается в том…
👍23🤯5
This media is not supported in your browser
VIEW IN TELEGRAM
Использование StoreKit для продвижения ваших приложений
💡Поделюсь советом для тех, у кого есть несколько пет-проектов или для компаний, которые интересуются возможностью кросс-промо😉.
Например, прочитал пользователь книгу об iOS-разработке, покажемэтот телеграм-канал приложение для покупки макбука.
Есть целый ряд опций, как это сделать — получить список продуктов, кастомный лейаут для каждого, вбить название и добавить кнопку со ссылкой, например. Можно сделать проще со
Ниже пример (можете написать свой):
В этом коде
One more thing, если баннер не должен скрываться по свайпу:
Специально для @iOS Dev.
💡Поделюсь советом для тех, у кого есть несколько пет-проектов или для компаний, которые интересуются возможностью кросс-промо😉.
Например, прочитал пользователь книгу об iOS-разработке, покажем
Есть целый ряд опций, как это сделать — получить список продуктов, кастомный лейаут для каждого, вбить название и добавить кнопку со ссылкой, например. Можно сделать проще со
StoreKit
, а точнее, с SKOverlay
.Ниже пример (можете написать свой):
func displayOverlay() {
guard let scene = view.window?.windowScene else { return }
let config = SKOverlay.AppConfiguration(appIdentifier: "APP_ID", position: .bottom)
let overlay = SKOverlay(configuration: config)
config.userDismissible = false
overlay.present(in: scene)
}
В этом коде
APP
_ID
— числовой идентификатор в аппстор.One more thing, если баннер не должен скрываться по свайпу:
config.userDismissible = false
Специально для @iOS Dev.
👍18🔥6
Продолжаю делиться находками с #WWDC и iOS 16
🙁 Раньше, чтобы получить путь к файлу в папке приложения, приходилось использовать API
🙂 Теперь мы можем получать пути к системным папкам непосредственно из свойств URL.
Например, чтобы получить URL каталога документов, мы можем прочитать свойство
@iOS Dev
🙁 Раньше, чтобы получить путь к файлу в папке приложения, приходилось использовать API
FileManager
, что выглядело довольно громоздко. 🙂 Теперь мы можем получать пути к системным папкам непосредственно из свойств URL.
Например, чтобы получить URL каталога документов, мы можем прочитать свойство
URL.documentsDirectory
@iOS Dev
👍42🔥8😱1
Семантика версионирования для Swift Package и не только
Представьте, что мы используем библиотеку из популярного пакета Swift. Что случится, если выпустят новую версию с огромными изменениями в ее публичном API? Наш код может сломаться. Чтобы избежать этой проблемы, мы могли бы полагаться на единственную версию. Хуже, если каждый владелец пакета имеет свой способ работы с версиями. Такие сценарии называются адом зависимостей (dependency hell).
Семантическое версионирование - это спецификация, призванная положить конец аду зависимостей. Она разделяет версии на три числа: major, minor и patch (например, 1.5.8). Вот что означает каждый номер:
🔵 Major — публичный API изменился, что требует обновления нашего кода.
🔵 Minor — в общедоступный API был добавлен новый код, который не нарушает существующие интеграции (обратная совместимость).
🔵 Patch — были исправлены ошибки без изменения публичного API.
📖 Здесь понятно объясняется, почему нужно делать именно так на примерах.
@iOS Dev
Представьте, что мы используем библиотеку из популярного пакета Swift. Что случится, если выпустят новую версию с огромными изменениями в ее публичном API? Наш код может сломаться. Чтобы избежать этой проблемы, мы могли бы полагаться на единственную версию. Хуже, если каждый владелец пакета имеет свой способ работы с версиями. Такие сценарии называются адом зависимостей (dependency hell).
Семантическое версионирование - это спецификация, призванная положить конец аду зависимостей. Она разделяет версии на три числа: major, minor и patch (например, 1.5.8). Вот что означает каждый номер:
🔵 Major — публичный API изменился, что требует обновления нашего кода.
🔵 Minor — в общедоступный API был добавлен новый код, который не нарушает существующие интеграции (обратная совместимость).
🔵 Patch — были исправлены ошибки без изменения публичного API.
📖 Здесь понятно объясняется, почему нужно делать именно так на примерах.
@iOS Dev
👍23
Как отменить асинхронную задачу в Swift?
💡Один из возможных способов — использование DispatchWorkItem.
@iOS Dev
💡Один из возможных способов — использование DispatchWorkItem.
DispatchWorkItem
инкапсулирует работу, которая должна быть выполнена в очереди диспетчеризации или в группе диспетчеризации. Его также можно использовать в качестве обработчика события, регистрации или отмены DispatchSource.@iOS Dev
👍26🤔3👏1
‼️ Сегодня 30 июня, а значит, что пора наконец уже реализовать в ваших приложениях удаление профиля, если вы этого ещё не сделали.
В целом, ситуация не выглядит сложной, если вы используете решения, в которых нет Sign In от Apple или же у вас собственный сервер для этого 😅.
Например, в одном из моих приложений используется как раз связка Sign In + Firebase, и, как оказывается, разработчики ещё не реализовали отзыв токена. К слову, iOS тоже такого инструмента не предоставляет, нужно генерить JWT и отзывать его только с помощью сервера.
Вероятно, в будущем или Google, или Apple уже упростят нам жизнь. А пока что можно воспользоваться решением из треда Firebase, или же от Ивана:
👏 Вот пост, который может пригодиться (как минимум, натолкнёт на правильный ход мыслей).
Всё равно, конечно, механизм не совсем тривиальный, нужно запросить код авторизации + сгенерить ключ в вашем аккаунте, но в целом ситуация уже будет выглядеть рабочей.
В целом, возможно несколько путей развития событий, среди которых кажется вероятным продление этого срока, не такая тщательная проверка отзыва токена на ревью, или апгрейд SDK через какое-то время.
❤️ Слежу за развитием событий, ваш @iOS Dev
В целом, ситуация не выглядит сложной, если вы используете решения, в которых нет Sign In от Apple или же у вас собственный сервер для этого 😅.
Например, в одном из моих приложений используется как раз связка Sign In + Firebase, и, как оказывается, разработчики ещё не реализовали отзыв токена. К слову, iOS тоже такого инструмента не предоставляет, нужно генерить JWT и отзывать его только с помощью сервера.
Вероятно, в будущем или Google, или Apple уже упростят нам жизнь. А пока что можно воспользоваться решением из треда Firebase, или же от Ивана:
👏 Вот пост, который может пригодиться (как минимум, натолкнёт на правильный ход мыслей).
Всё равно, конечно, механизм не совсем тривиальный, нужно запросить код авторизации + сгенерить ключ в вашем аккаунте, но в целом ситуация уже будет выглядеть рабочей.
В целом, возможно несколько путей развития событий, среди которых кажется вероятным продление этого срока, не такая тщательная проверка отзыва токена на ревью, или апгрейд SDK через какое-то время.
❤️ Слежу за развитием событий, ваш @iOS Dev
❤15👍7🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
RoomPlan в iOS 16 — 3D-планы этажей в ваших приложениях
Это новый API Swift, работающий на базе ARKit, использует камеру и сканер LiDAR на iPhone и iPad. Теперь ваши приложения могут создавать трехмерные планы этажей, включая ключевые характеристики, такие как размеры и типы мебели.
Фреймворк использует датчики устройства, ML-модели и RealityKit для захвата физического окружения. Например, фреймворк просматривает записи с камеры устройства и показания LiDAR и определяет стены, окна, проемы и двери.
Для захвата используется
⚪ Графические наложения в реальном времени отображаются поверх объектов в комнате, чтобы передать ход сканирования.
⚪ Если фреймворк требует определенного вида движения или ракурса, UI покажет инструкции, как расположить устройство.
🛠 Пример кода (нужен Xcode 14).
@iOS Dev
Это новый API Swift, работающий на базе ARKit, использует камеру и сканер LiDAR на iPhone и iPad. Теперь ваши приложения могут создавать трехмерные планы этажей, включая ключевые характеристики, такие как размеры и типы мебели.
Фреймворк использует датчики устройства, ML-модели и RealityKit для захвата физического окружения. Например, фреймворк просматривает записи с камеры устройства и показания LiDAR и определяет стены, окна, проемы и двери.
RoomPlan
распознает особенности помещения, мебель и технику, например, камин, кровать или холодильник, и передаёт данные в приложение.Для захвата используется
RoomCaptureView
. Есть виртуальные подсказки по мере перемещения по комнате:⚪ Графические наложения в реальном времени отображаются поверх объектов в комнате, чтобы передать ход сканирования.
⚪ Если фреймворк требует определенного вида движения или ракурса, UI покажет инструкции, как расположить устройство.
🛠 Пример кода (нужен Xcode 14).
@iOS Dev
👍18🔥11🤯2
Написал туториал по отображению лицензий из CocoaPods в приложениях
Главная фишка — для этого почти не надо писать код, в pod-файле не считается же? 😅.
Прочесть можно прямо здесь, в телеграме.
😎 Или же на хабре.
@iOS Dev
Главная фишка — для этого почти не надо писать код, в pod-файле не считается же? 😅.
Прочесть можно прямо здесь, в телеграме.
😎 Или же на хабре.
@iOS Dev
Telegraph
Как добавить список лицензий и благодарностей CocoaPods и при чём тут Settings.Bundle?
Для этого даже не понадобится писать код (ну почти). CocoaPods по мнению многих доживает свои славные времена, ведь развитие и распространение SPM (Swift Package Manager) продолжает набирать обороты. Но для тех, кто из вас до сих пор использует CocoaPods…
👍18🔥1
Полное руководство по использованию таймеров в Swift ⏳
О создании, повторениях и не только.
Класс Timer в Swift - это гибкий способ планирования будущих задач, как однократно, так и многократно.
📖 В этом руководстве представлены несколько способов работы с ним, а также решение частых проблем.
Примечание. Прежде чем начать, автор напоминает, что использование таймеров требует значительных затрат энергии. Будут рассмотрены способы смягчения этой проблемы.
🧐 Несмотря на это, в целом любой вид таймера должен вывести систему из состояния покоя, чтобы запустить работу, а это влечет за собой соответствующие затраты.
@iOS Dev
О создании, повторениях и не только.
Класс Timer в Swift - это гибкий способ планирования будущих задач, как однократно, так и многократно.
📖 В этом руководстве представлены несколько способов работы с ним, а также решение частых проблем.
Примечание. Прежде чем начать, автор напоминает, что использование таймеров требует значительных затрат энергии. Будут рассмотрены способы смягчения этой проблемы.
🧐 Несмотря на это, в целом любой вид таймера должен вывести систему из состояния покоя, чтобы запустить работу, а это влечет за собой соответствующие затраты.
@iOS Dev
🔥16👍5❤2