en
Feedback
iOS Dev

iOS Dev

Open in Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Show more
7 879
Subscribers
-124 hours
-77 days
-4930 days
Posts Archive
iOS Dev
7 879
iOS Responder Chain: UIResponder, UIEvent, UIControl и их использование 🤔 Что вообще за зверь такой, responder, если я имею
iOS Responder Chain: UIResponder, UIEvent, UIControl и их использование 🤔 Что вообще за зверь такой, responder, если я имею дело с UITextFields? 🤔 Почему UIViews юзает сабкласс от UIResponder? 🤔 Вообще, в чем их смысл? В iOS Responder Chain — это название, данное сгенерированному UIKit связному списку объектов UIResponder, и это основа для всего, что касается событий (touch, motion). 🛠 Responder Chain — это то, с чем мы постоянно встречаемся при разработке, и хотя не так часто приходится иметь с ней дело напрямую, пожалуй, кроме манипуляций с клавиатурой UITextField, знание того, как она работает, позволяет решать связанные с событиями проблемы простыми/креативными способами. Вкратце, экземпляры UIResponder это объекты, которые могут обрабатывать и реагировать на произвольные события. Многие вещи в iOS являются UIResponder, включая UIView, UIViewController, UIWindow, UIApplication и UIApplicationDelegate. 📖 В этом материале рассказывается про это детальнее, и приводятся примеры использования.

iOS Dev
7 879
DoNilDisturb Swift Plugin 😎 Важно не терять фокус во время выполнения задач, но знаете, иногда всем нам нужен отдых (особенн
DoNilDisturb Swift Plugin 😎 Важно не терять фокус во время выполнения задач, но знаете, иногда всем нам нужен отдых (особенно ближе к вечеру пятницы). Решил поделиться с вами шуточным плагином, который не позволит вам билдить проекты в нерабочее время😂 Не у всех выходные в субботу и воскресенье, и не у всех рабочий день длится с 9 до 17 часов, но всё-таки! Опенсорсный DoNilDisturb Swift Plugin (nil, ахахах, ну вы поняли) делает именно это — не даёт вам запустить ваш проект в нерабочее время. Хороших вам выходных, iOS-разработчики❤️!

iOS Dev
7 879
Создание кастомного ParseableFormatStyle в iOS ⏳ Начиная с iOS 2.0, старый класс Formatter и его производные, такие как DateFormatter и NumberFormatter, были основным средством преобразования значений в строки и наоборот — из строк. С течением времени Apple добавила другие крутые форматеры, такие как ByteCountFormatter, MeasurementFormatter, RelativeDateTimeFormatter и ListFormatter. 📖 В этом посте рассматриваются развёрнутые возможности и приводятся примеры, как расширить ParseableFormatStyle и связанные с ним протоколы, чтобы создать собственный пользовательский форматер телефонных номеров. Затем его используют для фактического форматирования ввода текстовых полей. 🙌 И хотя в статье автор пишет про iOS, эти протоколы доступны в macOS, watchOS и tvOS.

iOS Dev
7 879
Grand Central Dispatch: многопоточность, очереди, параллелизм Grand Central Dispatch (GCD) - это низкоуровневый API для управ
Grand Central Dispatch: многопоточность, очереди, параллелизм Grand Central Dispatch (GCD) - это низкоуровневый API для управления параллельными операциями. Он может помочь улучшить скорость отклика вашего приложения, откладывая вычислительно дорогие задачи на задний план. Это более простая в работе модель, нежели блокировки и потоки. 📖 В этом материале по Grand Central Dispatch, состоящем из двух частей, вы узнаете все тонкости GCD и его Swifty API. ⚫ В первой части объясняется, что делает GCD, и демонстрируется несколько основных функций GCD. ⚫ Во второй части вы узнаете о некоторых расширенных функциях GCD. Вы будете работать над существующим приложением под названием GooglyPuff. GooglyPuff - это неоптимизированное, "потокобезопасное" приложение, которое накладывает «гугл-глаза» на обнаруженные лица, используя API Core Image для обнаружения лиц. 🛠 В рамках этих статей GCD поможет оптимизировать приложение и обеспечить безопасный вызов кода из разных потоков.

iOS Dev
7 879
Как сбросить UserDefaults в Swift? 👌 Мы можем использовать UserDefaults в наших приложениях для хранения некоторых базовых к
Как сбросить UserDefaults в Swift? 👌 Мы можем использовать UserDefaults в наших приложениях для хранения некоторых базовых конфигураций или настроек приложения. Вот только по мере усложнения проекта иногда нам может понадобится функция очистки всего конфига. 🤔 Мы можем использовать метод removeObject, чтобы удалить значение для определенного ключа (и сделать так для каждого). 🛠 Но что делать, если таких ключей у нас пара десятков? Тогда на помощь придёт системное API, в котором пригодится removePersistantDomainForName.

iOS Dev
7 879
Паттерн «Навигатор»: изучаем и осваиваем NavigationStack в SwiftUI 👨‍💻 SwiftUI — это декларативный фреймворк, позволяющий н
Паттерн «Навигатор»: изучаем и осваиваем NavigationStack в SwiftUI 👨‍💻 SwiftUI — это декларативный фреймворк, позволяющий нам создавать сложные пользовательские интерфейсы, определяя данные, отображаемые на экране. 🧭 Навигация была главной больной точкой фреймворка с самого первого дня. К счастью, после #WWDC22 ситуация изменилась, и SwiftUI теперь предоставляет новый API навигации на основе данных. 📖 В этом материале можно узнать, как использовать новый Navigation API для построения user flow — пути, которым могут воспользоваться пользователи внутри приложения.

iOS Dev
7 879
WWDC: Вопросы и ответы из Digital Lounges В некоторых источниках уже фигурировали ответы по SwiftUI, собранные из каналов Sla
WWDC: Вопросы и ответы из Digital Lounges В некоторых источниках уже фигурировали ответы по SwiftUI, собранные из каналов Slack по итогам общения разработчиков с работниками Apple. 📖 Пользователь твиттера по имени Emin пошёл дальше и создал ресурс со всеми темам из Digital Lounges. 👏 Из плюсов — хороший поиск и степень структурирования, а также потенциальное масштабирование. 🛠 Также вы можете внести и свой вклад в опенсорсный проект на гитхабе.

iOS Dev
7 879
Улучшение работы с closures в Swift 5.7 ⏳ Раньше Swift действительно боролся с любыми замыканиями, которые не были тривиальны
Улучшение работы с closures в Swift 5.7 ⏳ Раньше Swift действительно боролся с любыми замыканиями, которые не были тривиальными, но начиная с Swift 5.7 мы теперь можем писать код, как в первом примере. 😎 В новой версии было принято предложение SE-0326. Это сделало вывод типов менее неожиданным для разработчиков и устранило существующую ошибку в поведении. 👌 Речь здесь идёт о том, что добавление еще одного выражения или оператора в closure могло приводить к ошибке компиляции. Теперь такого не будет, и это хорошо.

iOS Dev
7 879
Различные методы удаления последнего элемента из массива в Swift 1️⃣ dropLast() let fruits = ["Apple","Orange","Banana"] let
Различные методы удаления последнего элемента из массива в Swift 1️⃣ dropLast() let fruits = ["Apple","Orange","Banana"] let nonRoundFruits = fruits.dropLast() print(nonRoundFruits) // ["Apple", "Orange"] Использование метода dropLast() удалит последний элемент и вернет оставшиеся. dropLast() является предпочтительным методом удаления массива, поскольку он безопасен, так как не изменяет исходный массив. 2️⃣ removeLast() var fruits = ["Apple","Orange","Banana"] let removedFruit = fruits.removeLast() print(fruits) // ["Apple", "Orange"] print(removedFruit) // Banana В отличие от метода dropLast(), метод removeLast() удаляет последний элемент из исходного массива и модифицирует его. 3️⃣ popLast() var fruits = ["Apple","Orange","Banana"] let removedFruit = fruits.popLast() print(fruits) // ["Apple", "Orange"] print(removedFruit) // Optional("Banana") 🧐 Метод popLast() похож на прошлый, но есть разница. Если в массиве нет элементов перед вызовом popLast(), краша не будет. Вместо этого вернётся nil.

iOS Dev
7 879
Реализация собственного собственного календаря с использованием UICalendarView на Swift в iOS 16 👏 Написал небольшую статью про то, как быстро можно внедрить новый UICalendarView в ваше приложение на Swift, в котором будет новая ось. 😉 Пример кода тоже есть, иначе зачем это всё.

iOS Dev
7 879
Xcode 14 научили сохранять значение параметра при автокомплите вместо добавления нового 🎉 Одна из самых неприятных вещей в среде разработки была побеждена. Если раньше при автокомплите сохранялся старый код с уже заданным параметром и добавлялся новый слева, то теперь в Apple это оптимизировали и сэкономили всем нам немного нервов при разработке. Надеюсь, что инициаторы этой фичи в Xcode получили свою заслуженную премию 😉.

iOS Dev
7 879
Пример создания CircleLayout в SwiftUI ❗️Внимание! Эта возможность официально не документирована (или спрятана, как другие Pr
Пример создания CircleLayout в SwiftUI ❗️Внимание! Эта возможность официально не документирована (или спрятана, как другие Private API) и пока непонятно, как будут относиться в Apple на ревью. Я не рекомендую использовать это в ваших проектах на данный момент. 😎 Оказывается, что кроме стандартных типов лэйаута есть CircleLayout, который может привести к такому необычному отображению. Если кто-то из вас, коллеги, делал приложения для WatchOS, то возможно вы проходили через некоторые сложности анимаций. Мне этот CircleLayout напомнил анимацию для часов, страшно даже сказать вслух, с #WWDC 2015. ⏳ Верю, что этот тип layout рано или поздно всё-таки анонсируют, так как, например, для часов мы уже видели улучшения.

iOS Dev
7 879
Как использовать Live Text API в вашем приложении для iOS С iOS 16 функция Live Text стала доступна для разработчиков. Однако
Как использовать Live Text API в вашем приложении для iOS С iOS 16 функция Live Text стала доступна для разработчиков. Однако в Xcode 14 вы не найдете ни LiveTextKit, ни фреймворка с подобным названием. Всё дело в том, что новые API являются частью фреймворка VisionKit. ℹ️ И вообще, Live Text — это скорее маркетинговый термин. Классы, которые нужно использовать, это ImageAnalyzer и ImageAnalysisInteraction. Базовая настройка по на деле не очень сложная. Нам нужен UIImageView для отображения overlay и экземпляр UIImage с каким-нибудь изображением, содержащим либо текст, либо, например QR-код. 📖 В своей статье Filip Němeček приводит пример работы этих API. 📼 Перед этим можно посмотреть видео с #WWDC или почитать документацию.

iOS Dev
7 879
WWDC: Навигация по блокам видео #WWDC подошла к концу, и пусть мы некоторые нововведения уже расмотрели, но их, конечно же, н
WWDC: Навигация по блокам видео #WWDC подошла к концу, и пусть мы некоторые нововведения уже расмотрели, но их, конечно же, намного больше. Позволил себе вынести в отдельный блок приоритетные темы для изучения. 📼 Лучшее в Swift: последние обновления. 📼 Инструменты разработчика: все, что нужно для создания следующего топового приложения. 📼 System Services. 📼 Карты. 📼 SwiftUI и Frameworks. 📼 Privacy и Security. Остальные видео, сгруппированые по блокам, доступны по следующим ссылкам: 📼 Доступность и инклюзивность. 📼 Изменения в App Services: App Intents, SharePlay, WidgetKit, Focus, и другие. 📼 Лучшее из App Store Distribution и Marketing. 📼 Аудио и видео. 📼 Дополненная реальность. 📼 Бизнес и образование. 📼 Улучшения в дизайне: узнайте, как придумывать, повторять и создавать отличные интерфейсы. 📼 Графика и игры: повысьте уровень своих приложений и игр с помощью Metal 3. 📼 Здоровье и фитнес. 📼 ML и Vision. 📼 Фото и камера. 📼 Safari и Web. ❤️ Сделал для читателей @iOS Dev.

iOS Dev
7 879
Как с помощью Gauge в iOS 16 показать значение в заданном диапазоне 👨‍💻 Часто бывает так, что вы хотите отобразить прогресс
Как с помощью Gauge в iOS 16 показать значение в заданном диапазоне 👨‍💻 Часто бывает так, что вы хотите отобразить прогресс чего-то происходящего в вашем приложении, например, в отображающем список книг, и хотите показать прогресс чтения. В SwiftUI для этого можно использовать представление Gauge View (подробнее в документации). 🙌 Кроме этого, вы можете дополнительно стилизовать внешний вид индикатора, задав цвет оттенка или градиент в инициализаторе. На картинке показан эффект градиента с CircularGaugeStyle.

iOS Dev
7 879
Создание и настройка диаграмм с помощью нового Swift Charts Framework 💻 Уже появляются статьи и туториалы, связанные с анонс
Создание и настройка диаграмм с помощью нового Swift Charts Framework 💻 Уже появляются статьи и туториалы, связанные с анонсами #WWDC, по мере сил делюсь с вами этими материалами в доступных форматах. 📖 Адаптировал и запилил на хабре урок про создание и настройку диаграммы со слоями. 📖 Для тех, кто предпочитает читать в телеге — то же самое, доступно тут. 🛠 Базовый материал можно прочесть здесь, а код, по традиции, на гитхабе.

iOS Dev
7 879
Xcode 14 научили добавлять отступы при вводе закрывающей скобки 😎По факту, это аналог команды Ctrl + i. Она же находится в Editor -> Structure -> Re-Indent.

iOS Dev
7 879
Упрощаем написание и понимание кода в Swift 5.7 использованием some В своем канале постараюсь приводить самые занятные моменты сессий в виде небольших постов с разбором. На гифке объявление идентично предыдущему, но ненужный список параметров типа и where исчезли, потому что нам не всегда нужна выразительность, которую они обеспечивают. Запись some Animal более понятна, поскольку уменьшает синтаксический шум и включает семантическую информацию о параметре animal прямо в объявление параметра. Немного про синтаксис some Animal 1️⃣ Слово some указывает на то, что вы работаете с определенным типом. 2️⃣ За ключевым словом some всегда следует требование соответствия. 3️⃣ В данном случае конкретный тип должен соответствовать протоколу Animal, что позволит нам использовать требования протокола Animal для значения параметра. 4️⃣ Ключевое слово some можно использовать в типах параметров и результатов. 😉 Кстати, если вы уже писали код SwiftUI, вы использовали some. Some View несёт точно такой же смысл.

iOS Dev
7 879
Упрощаем написание и понимание кода в Swift 5.7 использованием some В своем канале постараюсь приводить в качестве примеров самые занятные моменты сессий в виде небольших постов с разбором. На гифке объявление идентично предыдущему, но ненужный список параметров типа и where исчезли, потому что нам не всегда нужна выразительность, которую они обеспечивают. Запись some Animal более понятна, поскольку уменьшает синтаксический шум и включает семантическую информацию о параметре animal прямо в объявление параметра. Немного про синтаксис some Animal 1️⃣ Слово some указывает на то, что вы работаете с определенным типом. 2️⃣ За ключевым словом some всегда следует требование соответствия. 3️⃣ В данном случае конкретный тип должен соответствовать протоколу Animal, что позволит нам использовать требования протокола Animal для значения параметра. 4️⃣ Ключевое слово some можно использовать в типах параметров и результатов. 😉 Кстати, если вы уже писали код SwiftUI, вы использовали some. Например, some View — несёт точно такой же смысл.

iOS Dev
7 879
SF-символы получили ещё один веский повод посмотреть на них под другим углом С каждым годом они становятся сложнее и полезнее
SF-символы получили ещё один веский повод посмотреть на них под другим углом С каждым годом они становятся сложнее и полезнее. Даже если бы нам каждый год добавляли больше символов, это уже было бы неплохо 😉. Буквально вчера я уже писал про то, что в Apple упростили их интеграцию в наши приложения. Но это не всё! В Apple ищут способы для расширения возможностей многих вещей и добавления новых фреймворков. И сразу после того, как нам предоставили разные стили рендеринга символов, появилась возможность ещё и по-разному их заполнять. Короче говоря, мы можем «заполнить» глиф на основе процентного значения от 0 до 1. Примеры использования, о которых можно подумать сразу: 1️⃣ Прогресс загрузки или обновления. 2️⃣ Сила сигнала Wi-Fi. 3️⃣ Заряд вашего телефона (и не только его). 4️⃣ Размер волн на море (простите, лето). 😎 В общем, примеров использования этого простого улучшения может быть много, и здорово, что символы постоянно прокачивают.