iOS Dev
7.75K subscribers
1.01K photos
88 videos
1 file
1.18K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
Пример работы с Apple Health: авторизация и сохранение данных

HealthKit предоставляет центральный репозиторий данных о здоровье и физической форме на iPhone и Apple Watch.

С разрешения пользователя приложения взаимодействуют с HealthKit для доступа к этим данным и обмена ими.

📖 В этом коротком материале объясняется, как сохранить данные и информацию в Apple Health с помощью нескольких строк кода.

🛠 Пример приложения.

@iOS Dev
👍21🔥51👏1🎉1
Подробное объяснение Enum с примерами кода в Swift

Конечно, Enum широко используется в в Swift: If case, guard case, fallthrough и протокол CaseIterable.

Все эти термины могут показаться вам знакомыми, если вы много работали с перечислениями.

Очень важно знать об этих возможностях, чтобы улучшить читабельность вашего кода, и, что более важно, чтобы уменьшить количество потенциальных ошибок.

📖 В этом материале на примерах объясняется, как именно можно использовать перечисление в тех или иных случаях.

ℹ️ Кстати, про 3 способа использования enum, которые должны быть в вашем арсенале, можно прочесть здесь.

@iOS Dev
👍34🔥5👏52
Многопоточность в 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 примером использования на базе существующего проекта

🔗 Итерация сообщений веб-сокетов с помощью async / await в Swift

Лучшее спасибо👍❤️🔥👏🎉❤️‍🔥.

@iOS Dev — из этого канала кое-что точно можно сохранить себе😅
🔥117👍1514❤‍🔥8👏6🏆3🎉2👨‍💻2
iOS Dev pinned «Многопоточность в Swift Подборка материалов для подготовки к собеседованиям Ключевые темы этого поста: GCD (Grand Central Dispatch), Async/Await, Deadlock, Race Condition, Data race, Thread Explosion, Semaphore 🗒 Для удобства материалы разбиты на два блока…»
Путь в тысячу ли начинается с первого шага

Эту цитату я когда-то уже упоминал, и, безусловно, она не теряет актуальности в преддверии нового года.

Нам всегда сложно начать, а ещё сложнее делать что-то регулярно: формировать полезные привычки, решать задачи на литкоде, вести канал или методично углублять свои знания.

👩‍🎓 В качестве примера могу привести одну притчу: Будда хотел передал приглашение коту, но тот в силу своей природной лени решил поспать и пропустил собрание, и поэтому год стал называться в честь другого пушистого — кролика.

В моём канале вы не найдете советы про несколько работ одновременно или про то, как быть экспертом во всём сразу. Я не вхожу в топ-5 айосеров по некоторым рейтингам и не стремлюсь заполнить инфополе белым шумом.

Но могу сказать следующее: как и прежде, я продолжу делиться своим опытом (ошибками и не только), интересными материалами и разборами необычных вещей вместе с вами.

2023 на пороге. Проведите это время с теми, кто важен для вас. А поскольку пост начался с цитаты, то ею же я и постараюсь закончить:

If you haven't found it yet, keep looking. (Если вы еще не нашли того, что искали, продолжайте поиски.) — Стив Джобс

@iOS Dev — мира нам всем ❤️‍🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥57👍156🔥5🎄32🎉2🤩1💯1🎅1
Как поддерживать несколько виджетов при использовании WidgetKit?

Наличие нескольких виджетов с различными функциями в настоящее время является довольно распространенной функцией для приложений.

Например, в приложении для покупок может быть виджет, показывающий сегодняшнюю акцию, и другой виджет, показывающий статус заказа пользователя.

Я, например, в одном из своих приложений я использую комбинацию виджетов для отображения общих сбережений и избранных целей.

Опций у нас не так много, а на самом деле существует два способа включить в наших приложениях поддержку нескольких виджетов:

1️⃣ Использование widget bundle.

2️⃣ Наличие нескольких расширений.

📖 В этой статье рассматриваются оба этих метода по отдельности.

@iOS Devнемного отдохнули, а теперь пора в 2023
🔥13👍8👏21💯1
ArraySlice с примерами использования: оператор range и prefix

Перед прочтением материала ниже попробуйте ответить:

📊 вот на этот вопрос

Стандартная библиотека Swift предоставляет ArraySlice для работы с подмножеством большей коллекции без ненужных расходов на создание копии.

Получить первые несколько элементов коллекции можно с помощью использования range, но безопаснее использовать метод prefix, не беспокоясь об исключении out of range.

📖 В этой статье в прямом смысле наглядно объясняется, что на самом деле скрывает ArraySlice и как избежать ошибок.

@iOS Dev
👍202🔥2💯21🤩1
10 различных способов реализации перебора в Swift

Один из самых важных элементов программирования, о котором большинство из нас не задумывается — это циклы.

Без них жизнь в мире программирования была бы почти невозможна.

📖 В этом материале приводится несколько коротких фрагментов кода, которые вы можете использовать для реализации: от простых к более сложным.

@iOS Dev
👍16🌚43🔥3👏1💯1
Почему использование isEmpty быстрее, чем проверка count == 0?

Чтобы понять, почему isEmpty быстрее, чем count == 0 для строк, нам нужно углубиться в то, как строки работают в Swift на самом деле.

Строки Swift представляют собой сложные наборы символов, в которых несколько символов могут объединяться вместе, образуя одну букву, видимую пользователям.

Например, такой простой смайлик, как британский флаг 🇬🇧, на самом деле состоит из двух разных символов: «G» и «B».

Символы Unicode, если их поставить рядом, автоматически станут британским флагом.

На самом деле в Swift большая часть сложности спрятана внутри, например, один символ, видимый пользователям, может быть дюжиной базовых значений в самой строке.

Таким образом, когда мы читаем размер строки с помощью count, Swift должен пройти через все символы, чтобы выяснить настоящую длину строки.

📖 В этом материале приводится детальное объяснение смелого заявления на примерах.

@iOS Dev
👍52🔥94👏2💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Кастомные анимации переходов между UIViewController с использованием Metal

Metal — это низкоуровневый API для программирования GPGPU (General Purpose Graphics Processing Unit).

Довольно часто многие боятся использовать новые API из-за недостатка знаний о том, что может предоставить инструмент, а также из-за отсутствия информации, доступной в Интернете для изучения (иногда это ограничивается скудной документацией Apple).

📖 В этом материале можно узнать, как использовать Metal в приложении, создавая собственные переходы (и анимации).

Ricardo Rachaus рассказывает о своем опыте работы с Metal и приводит пример, как применять Metal API в своих приложениях.

🛠 А вот в этом репозитории можно посмотреть код и попробовать создать собственную анимацию.

@iOS Dev
🔥46👍8🆒3👏2🤣2🏆2❤‍🔥11💯1
AsyncStream в Swift: определение и примеры использования

Вы можете связать свой существующий асинхронный код с новой системой Concurrency Swift, которая использует async/await (более подробно можно посмотреть здесь).

Однако в некоторых случаях подход выше не сработает, например, если нужно реализовать: ход загрузки, текущее местоположение пользователя и другие подобные ситуации.

📖 В этом посте объясняется, как можно использовать AsyncStream для создания кастомных асинхронных последовательностей, которые будут выдавать значения по мере необходимости.

@iOS Dev
👍16🔥5👏21🤯1
5 способов передавать данные из UIKit в SwiftUI

Отправка данных из UIKit и SwiftUI может быть довольно непростой, однако существует несколько разных способов сделать это.

🗝 Ключ в том, чтобы найти метод, который лучше всего подходит для вашего проекта и ваших потребностей.

Интеграция SwiftUI и UIKit — это непрерывный процесс, и по мере развития технологий вскоре могут появиться новые методы.

Даже несмотря на то, что многим из нас приходится поддерживать старые версии iOS, будет полезно периодически пополнять базу знаний.

📖 В этом материале автор расскажет о следующих вариантах для передачи данных:

🔘View Initializer.
🔘Observable Objects.
🔘User Defaults.
🔘Environment Object.
🔘Notification Center.

@iOS Dev
👍223🔥3👏3🌚3💯1
URLSession: распространенные ошибки при выполнении задач фоновой загрузки и скачивания

URLSession позволяет загружать и загружать файлы, когда приложение работает в фоновом режиме.

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

Реализация поддержки передачи данных в фоновом режиме сопряжена со множеством подводных камней.

Например, Xcode debugger может помешать в отладке, а реальное устройство, наоборот, помочь.

📖 В этом посте автор делится своим опытом о столкновении с некоторыми распространенными ловушками.

Кстати, рекомендую прочесть про способ ожидания подключения к интернету.
А ещё есть материал о написании API-клиента с использованием async/await.

@iOS Dev
👍24🔥6👏21💯1
Пример работы с async let для параллельного выполнения фоновых задач в Swift

📱Задача для реализации поддержки отзывчивого пользовательского интерфейса — одна из наиболее приоритетных при разработке.

async/await предоставляет чистый механизм для выполнения асинхронных задач.

Но бывают такие случаи, когда вызывается несколько методов в фоновом режиме, и по умолчанию эти вызовы выполняются последовательно.

async let возвращается немедленно, позволяя коду перейти к следующему вызову, и уже затем все возвращенные объекты можно ожидать вместе (используя await).

📖 В этом материале на примере имитации загрузки файлов объясняется, как можно использовать async let.

@iOS Dev
👍20🔥7😐21👏1🤗1
Шпаргалка по Swift DateFormatter с формулами и примерами

Управление и в целом форматирование дат в Swift — частая задача при разработке.

📖 В этом посте представлены примеры работы с DateFormatter, Date и другими структурами, которые позволяют анализировать, форматировать и извлекать компоненты из дат и строк.

@iOS Dev
🔥28👍83👏2🏆1
Пример реализации загрузки файла на сервер без использования сторонних библиотек на Swift

По этой ссылке немного вводной теории:

🌐 Что такое multipart/form-data?

В двух словах, как работает уровень HTTP: вы отправляете некоторые данные с некоторыми заголовками на заданный URL-адрес, используя метод, и в качестве ответа вы получите код состояния, некоторые заголовки и, возможно, что-то вроде данных ответа.

🔘 HTTP request = Method + URL + Headers + Body (request data)
🔘 HTTP response = Status code + Headers + Body (response data)

📖 В своей статье Tibor Bödecs рассказывает, как реализовать это, используя Swift, и приводит примеры кода.

@iOS Dev
👍19🔥3👏2🆒21
Вычисление математических выражений с помощью Swift
От научного калькулятора до приложения для работы с электронными таблицами

Арифметические выражения могут быть записаны в одной из трех форм нотаций: infix, prefix, postfix.

Несмотря на то, что инфиксную нотацию труднее всего обрабатывать на компьютерах, она представляет собой то, как выражения пишутся и распознаются людьми.

Однако, поскольку инфиксные выражения не подходят для простого вычисления, их следует преобразовать либо в префиксную, либо в постфиксную нотацию.

В двух больших материалах Elina Semenko рассказывает о каждом типе нотаций, совершает краткий экскурс в историю, и объясняет на примерах необходимые преобразовнаия, используя Swift.

📖 Первая часть. Преобразование инфиксных выражений в постфиксные выражения.

📖 Вторая часть. Улучшение алгоритма и пример использования NSExpression.

Бонусом рассматривается применение фреймворка JavaScriptCore (в чём может быть польза, и почему его стоит использовать в очень редких ситуациях).

@iOS Dev
👍13🔥4👏21💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация видеоплеера на Swift с помощью RealityKit

Apple продолжает исследование и изредка появляются анонсы об очках за $ 3 000. На мой взгляд, не стоит недооценивать потенциальный пул аудитории, которая захочет (и сможет) их себе позволить, и поэтому для прокачивания этой области изредка можно изучать и обращать внимание на связанные с технологией вещи.

Например, зачем необходим огромный физический телевизор, если вы можете транслировать свой контент на виртуальный, который можно разместить где угодно.

К слову, энтузисты продолжают изучать различные возможности RealityKit, и некоторые вещи реализовать намного проще, чем кажется.

📖 Например, David Cordero показывает, что создать плеер, используя этот фреймворк, совсем несложно.

@iOS Dev
🔥22👍83👏2🤩2💯1🤗1
Внимание, вопрос!
🔥7👍4👏2🤔2👨‍💻21👌1🆒1
Каким будет результат выполнения кода со скриншота выше?
Anonymous Quiz
40%
true
23%
false
1%
nil
27%
Код не скомпилируется
9%
Код скомпилируется, но будет ошибка в рантайме
👍17😐15🔥7🫡31👏1