iOS Dev
前往频道在 Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
显示更多7 878
订阅者
-124 小时
无数据7 天
-5130 天
帖子存档
7 878
URLSession: распространенные ошибки при выполнении задач фоновой загрузки и скачивания
URLSession позволяет загружать и загружать файлы, когда приложение работает в фоновом режиме.
Все, кто так или иначе работал с URLSession, понимают, что иногда возникают сложности при реализации загрузки нескольких файлов или работе в бэкграунде.
Реализация поддержки передачи данных в фоновом режиме сопряжена со множеством подводных камней.
Например, Xcode debugger может помешать в отладке, а реальное устройство, наоборот, помочь.
📖 В этом посте автор делится своим опытом о столкновении с некоторыми распространенными ловушками.
Кстати, рекомендую прочесть про способ ожидания подключения к интернету.
А ещё есть материал о написании API-клиента с использованием async/await.
@iOS Dev7 878
5 способов передавать данные из UIKit в SwiftUI
Отправка данных из UIKit и SwiftUI может быть довольно непростой, однако существует несколько разных способов сделать это.
🗝 Ключ в том, чтобы найти метод, который лучше всего подходит для вашего проекта и ваших потребностей.
Интеграция SwiftUI и UIKit — это непрерывный процесс, и по мере развития технологий вскоре могут появиться новые методы.
Даже несмотря на то, что многим из нас приходится поддерживать старые версии iOS, будет полезно периодически пополнять базу знаний.
📖 В этом материале автор расскажет о следующих вариантах для передачи данных:
🔘View Initializer.
🔘Observable Objects.
🔘User Defaults.
🔘Environment Object.
🔘Notification Center.
@iOS Dev
7 878
AsyncStream в Swift: определение и примеры использования
Вы можете связать свой существующий асинхронный код с новой системой Concurrency Swift, которая использует
async/await (более подробно можно посмотреть здесь).
Однако в некоторых случаях подход выше не сработает, например, если нужно реализовать: ход загрузки, текущее местоположение пользователя и другие подобные ситуации.
📖 В этом посте объясняется, как можно использовать AsyncStream для создания кастомных асинхронных последовательностей, которые будут выдавать значения по мере необходимости.
@iOS Dev7 878
Кастомные анимации переходов между UIViewController с использованием Metal
Metal — это низкоуровневый API для программирования GPGPU (графического процессора общего назначения).
Довольно часто многие боятся использовать новые API из-за недостатка знаний о том, что может предоставить инструмент, а также из-за отсутствия информации, доступной в Интернете для изучения (иногда это ограничивается скудной документацией Apple).
📖 В этом материале можно узнать, как использовать Metal в приложении, создавая собственные переходы (и анимации).
Ricardo Rachaus рассказывает о своем опыте работы с Metal и приводит пример, как применять Metal API в своих приложениях.
🛠 А вот в этом репозитории можно посмотреть код и попробовать создать собственную анимацию.
@iOS Dev7 878
Почему использование isEmpty быстрее, чем проверка count == 0?
Чтобы понять, почему
isEmpty быстрее, чем count == 0 для строк, нам нужно углубиться в то, как строки работают в Swift на самом деле.
Строки Swift представляют собой сложные наборы символов, в которых несколько символов могут объединяться вместе, образуя одну букву, видимую пользователям.
Например, такой простой смайлик, как британский флаг 🇬🇧, на самом деле состоит из двух разных символов: «G» и «B».
Символы Unicode, если их поставить рядом, автоматически станут британским флагом.
На самом деле в Swift большая часть сложности спрятана внутри, например, один символ, видимый пользователям, может быть дюжиной базовых значений в самой строке.
Таким образом, когда мы читаем размер строки с помощью count, Swift должен пройти через все символы, чтобы выяснить настоящую длину строки.
📖 В этом материале приводится детальное объяснение смелого заявления на примерах.
@iOS Dev7 878
10 различных способов реализации перебора в Swift
Один из самых важных элементов программирования, о котором большинство из нас не задумывается — это циклы.
Без них жизнь в мире программирования была бы почти невозможна.
📖 В этом материале приводится несколько коротких фрагментов кода, которые вы можете использовать для реализации: от простых к более сложным.
@iOS Dev
7 878
Многопоточность в Swift
Подборка материалов для подготовки к собеседованиям
Ключевые темы этого поста: GCD (Grand Central Dispatch), Async/Await, Deadlock, Race Condition, Data race, Thread Explosion, Semaphore
🗒 Для удобства материалы разбиты на два блока, подборка будет дополняться по традиции с прошлым блоком:
🔗 Память, ссылки, side table и многое другое
🇷🇺 Материалы на русском языке
🔗 Многопоточность (concurrency) в Swift: GCD и Dispatch Queues
🔗 Concurrency в Swift, Operation и OperationQueue
🔗 Полное руководство по параллелизму и многопоточности в iOS
🔗 Про многопоточность: Thread и GCD
🔗 Structured concurrency в Swift
🔗 Многопоточность: Примитив синхронизации Semaphore🚦
🔗 Простое определение проблем многопоточки: Race Condition vs Data Race
🏴 Материалы на английском языке
🔗 Grand Central Dispatch: от определения к низкоуровневым примитивам
🔗 Grand Central Dispatch: многопоточность, очереди, параллелизм (две части)
🔗 Объяснение параллелизма: как создать многопоточное приложение для iOS
🔗 Swift Concurrency — вещи, о которых вам не говорят (и почему Actor - тихий убийца вашего кода, а Tasks - бутылочное горлышко)
🔗 Grand Central Dispatch (GCD) Tutorial in Swift 5 за авторством Вадима Булавина
🔗 Несложный блок вопросов в целом по Concurrency
Что почитать ещё?
🔗 Реализация API-клиента для работы с запросами в Swift с использованием Async/Await
🔗 Как приостановить Task в Swift?
🔗 Разбор вариантов рефакторинга в Xcode для async/await
🔗 Создание и планирование локальных уведомлений с помощью async/await
🔗 Async/await в Swift c примером использования на базе существующего проекта
Лучшее спасибо — 👍❤️🔥👏🎉❤️🔥.
@iOS Dev — из этого канала кое-что точно можно сохранить себе😅
7 878
Подробное объяснение Enum с примерами кода в Swift
Конечно,
Enum широко используется в в Swift: If case, guard case, fallthrough и протокол CaseIterable.
Все эти термины могут показаться вам знакомыми, если вы много работали с перечислениями.
Очень важно знать об этих возможностях, чтобы улучшить читабельность вашего кода, и, что более важно, чтобы уменьшить количество потенциальных ошибок.
📖 В этом материале на примерах объясняется, как именно можно использовать перечисление в тех или иных случаях.
ℹ️ Кстати, про 3 способа использования enum, которые должны быть в вашем арсенале, можно прочесть здесь.
@iOS Dev7 878
Пример работы с Apple Health: авторизация и сохранение данных
HealthKit предоставляет центральный репозиторий данных о здоровье и физической форме на iPhone и Apple Watch.
С разрешения пользователя приложения взаимодействуют с HealthKit для доступа к этим данным и обмена ими.
📖 В этом коротком материале объясняется, как сохранить данные и информацию в Apple Health с помощью нескольких строк кода.
🛠 Пример приложения.
@iOS Dev7 878
5 советов по использованию брейкпоинтов, о которых вы могли не знать
Брейкпоинты в Xcode позволяют нам отлаживать и находить решения для неприятных ошибок. Без них это было бы веселым праздником свалкой
print в коде.
📖 В этом материале автор напоминает про следующие возможности:
🔘 Создание брейкпоинтов для всех проектов в Xcode (автоматически).
🔘 Шаринг брейкпоинтов через git.
🔘 Exception breakpoints c заданным действием отладчика.
🔘 Символические брейкпоинты (при вызове определённого метода). А также приводится пример для отладки проблем, связанных с UICollectionView.
🔘 Test failure breakpoint (при сбое тестов).
@iOS Dev7 878
7 способов передать замыкание в качестве аргумента в Swift
Рекомендую ознакомиться со следующим постом, если вы только сталкиваетесь с замыканиями:
📖 Для чего нужны closures (замыкания) в Swift и как с ними работать?
В самой iOS существует множество функций и методов, которые принимают замыкание в качестве одного из своих аргументов. Например, функции анимации:
class func animate(withDuration duration: TimeInterval,
animations: @escaping () -> Void)
или фильтра:
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
Существует несколько способов передать замыкание в эти функции.
📖 И об этих способах и пойдет речь в этом материале.
@iOS Dev7 878
Почелленджите свои скилы iOS-разработчика на хардовом тесте и получите подарок
Под Новый год сервис развития карьеры Эйч собрал 20 ведущих IT-команд и устроил Междусобойчик. Это такой формат знакомства с компаниями: можно заранее разобраться — мэтч у вас или нет, а заодно проявить себя на профильном тесте.
iOS-разработку в Междусобойчике представляет команда Альфа-Банка. Правила участия простые:
1. Выбираете профессию на сайте
2. Проходите хардовый тест
Вопросы составил Яндекс Практикум, так что удастся почелленджить свои скилы: вспоминайте всё, что знаете про Swift и его стандартную библиотеку.
3. Получаете цифровые подарки
Например, сертификаты на карьерные консультации Эйч, спорт от Фитмоста, книги МИФ и курсы Синхронизации, а также мерч от компаний.
Пройти хардовый тест по iOS-разработке и получить новогодние подарки можно по ссылке.
@iOS Dev
7 878
Локальное управление несколькими версиями Swift
Самый распространенный способ установки версии Swift — это загрузка Xcode.
В некоторых случаях может потребоваться загрузить тулчейн, не связанный с релизной версией Xcode, например для другой архитектуры вроде WebAssembly.
📖 В этой статье объясняется, как установить и использовать тулчейн Swift как вручную, так и с помощью инструмента командной строки под названием swiftenv (⭐1.9k на github).
@iOS Dev
7 878
Как создать виджет для экрана блокировки в iOS?
В iOS 16 Apple серьезно переработала экран блокировки.
Поскольку виджеты для хоумскрина и для локскрина работают на
WidgetKit, способ создания для экрана блокировки очень похож на вот этот.
📖 В этом материале рассказывается о необходимых шагах и приводится пример кода для создания такого виджета.
@iOS Dev7 878
Метатипы в Swift: что такое .self, .Type и .Protocol?
Метатипы очень полезны в Swift, и вы наверняка использовали их неоднократно.
К сожалению, в коде они выглядят довольно странно, что может вызвать некоторую путаницу при попытке понять, что они собой представляют на самом деле.
📖 В этом материале Бруно Роша подробно объясняет следующее:
1️⃣ Что представляет собой метатип?
2️⃣ Отличия динамических метатипов от статических.
3️⃣ Метатипы протоколов.
4️⃣ Ещё больше вариантов использования метатипов.
@iOS Dev
7 878
Объяснение параллелизма: как создать многопоточное приложение для iOS
Параллелизм в iOS — обширная (даже гигантская) тема. Автор пишет, что если вы никогда раньше не использовали GCD, эта статья — отличное место для начала.
В частности, объясняется разница между последовательными и параллельными очередями (
serial и concurrent), а также различия между синхронным и асинхронным выполнением.
📖 А сам материал разбит на следующие части:
1️⃣ Параллелизм и Grand Central Dispatch.
2️⃣ Dispatch Queues.
3️⃣ Пример использования DispatchWorkItem.
4️⃣ Sync vs Async.
5️⃣ Что может вызвать deadlock и для чего можно использовать async.
6️⃣ Serial vs Concurrent.
7️⃣ Подводные камни. Кстати, тут интересный пример про машину, блокирующую скорую на узкой улице.
Также автор затрагивает (правда, не углубляясь в тему) взрыв потоков и гонки.
🛠 Приложение из статьи доступно на github.
@iOS Dev7 878
Освоить мобильную разработку с нуля можно на курсах Яндекс Практикума
→ Android-разработка: 12 месяцев, языки Java и Kotlin
→ iOS-разработка: 10 месяцев, язык Swift
На курсах вы научитесь разрабатывать и выпускать приложение с нуля:
— Освоите синтаксис языка, работу в среде разработки.
— Поработаете с системой контроля версий Git, чтобы создавать проекты с другими разработчиками.
— Освоите вёрстку, навигацию, обработку жестов.
— Научитесь хранить и обрабатывать данные.
— Сможете настраивать клиент-серверное взаимодействие, делать запросы, работать с API, чтобы приложение получало и отдавало данные в бэкенд-разработку
— Научитесь проектировать архитектуру с помощью основных шаблонов и паттернов
— Поймёте, как тестировать код и пользовательские сценарии
— Разовьёте софтскилы, которых ждут от разработчиков работодатели: проведение ревью своего и чужого кода, работа с обратной связью, декомпозиция и оценка задач, коммуникация, командная работа.
На каждом курсе будет проектная работа: вы создадите три учебных приложения.
— Android-разработка: приложение для работы с контактами, для составление плейлистов и афиша.
— iOS-разработка: приложение-маркетплейс, трекер, квиз и поисковик изображений.
Попробуйте и напишите своё первое приложение бесплатно:
Android-разработка
iOS-разработка
@iOS Dev
