Пример работы с Apple Health: авторизация и сохранение данных
С разрешения пользователя приложения взаимодействуют с
📖 В этом коротком материале объясняется, как сохранить данные и информацию в Apple Health с помощью нескольких строк кода.
🛠 Пример приложения.
@iOS Dev
HealthKit
предоставляет центральный репозиторий данных о здоровье и физической форме на iPhone и Apple Watch. С разрешения пользователя приложения взаимодействуют с
HealthKit
для доступа к этим данным и обмена ими.📖 В этом коротком материале объясняется, как сохранить данные и информацию в Apple Health с помощью нескольких строк кода.
🛠 Пример приложения.
@iOS Dev
👍21🔥5❤1👏1🎉1
Подробное объяснение Enum с примерами кода в Swift
Конечно,
Все эти термины могут показаться вам знакомыми, если вы много работали с перечислениями.
Очень важно знать об этих возможностях, чтобы улучшить читабельность вашего кода, и, что более важно, чтобы уменьшить количество потенциальных ошибок.
📖 В этом материале на примерах объясняется, как именно можно использовать перечисление в тех или иных случаях.
ℹ️ Кстати, про 3 способа использования enum, которые должны быть в вашем арсенале, можно прочесть здесь.
@iOS Dev
Конечно,
Enum
широко используется в в Swift: If case
, guard case
, fallthrough
и протокол CaseIterable
. Все эти термины могут показаться вам знакомыми, если вы много работали с перечислениями.
Очень важно знать об этих возможностях, чтобы улучшить читабельность вашего кода, и, что более важно, чтобы уменьшить количество потенциальных ошибок.
📖 В этом материале на примерах объясняется, как именно можно использовать перечисление в тех или иных случаях.
ℹ️ Кстати, про 3 способа использования enum, которые должны быть в вашем арсенале, можно прочесть здесь.
@iOS Dev
👍34🔥5👏5❤2
Многопоточность в 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 — из этого канала кое-что точно можно сохранить себе😅
Подборка материалов для подготовки к собеседованиям
Ключевые темы этого поста: 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👍15❤14❤🔥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 — мира нам всем ❤️🔥
Эту цитату я когда-то уже упоминал, и, безусловно, она не теряет актуальности в преддверии нового года.
Нам всегда сложно начать, а ещё сложнее делать что-то регулярно: формировать полезные привычки, решать задачи на литкоде, вести канал или методично углублять свои знания.
В моём канале вы не найдете советы про несколько работ одновременно или про то, как быть экспертом во всём сразу. Я не вхожу в топ-5 айосеров по некоторым рейтингам и не стремлюсь заполнить инфополе белым шумом.
Но могу сказать следующее: как и прежде, я продолжу делиться своим опытом (ошибками и не только), интересными материалами и разборами необычных вещей вместе с вами.
2023 на пороге. Проведите это время с теми, кто важен для вас. А поскольку пост начался с цитаты, то ею же я и постараюсь закончить:
@iOS Dev — мира нам всем ❤️🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥57👍15❤6🔥5🎄3☃2🎉2🤩1💯1🎅1
Как поддерживать несколько виджетов при использовании WidgetKit?
Наличие нескольких виджетов с различными функциями в настоящее время является довольно распространенной функцией для приложений.
Например, в приложении для покупок может быть виджет, показывающий сегодняшнюю акцию, и другой виджет, показывающий статус заказа пользователя.
Я, например, в одном из своих приложений я использую комбинацию виджетов для отображения общих сбережений и избранных целей.
Опций у нас не так много, а на самом деле существует два способа включить в наших приложениях поддержку нескольких виджетов:
1️⃣ Использование widget bundle.
2️⃣ Наличие нескольких расширений.
📖 В этой статье рассматриваются оба этих метода по отдельности.
@iOS Dev —немного отдохнули, а теперь пора в 2023
Наличие нескольких виджетов с различными функциями в настоящее время является довольно распространенной функцией для приложений.
Например, в приложении для покупок может быть виджет, показывающий сегодняшнюю акцию, и другой виджет, показывающий статус заказа пользователя.
Я, например, в одном из своих приложений я использую комбинацию виджетов для отображения общих сбережений и избранных целей.
Опций у нас не так много, а на самом деле существует два способа включить в наших приложениях поддержку нескольких виджетов:
1️⃣ Использование widget bundle.
2️⃣ Наличие нескольких расширений.
📖 В этой статье рассматриваются оба этих метода по отдельности.
@iOS Dev —
🔥13👍8👏2❤1💯1
ArraySlice с примерами использования: оператор range и prefix
Перед прочтением материала ниже попробуйте ответить:
📊 вот на этот вопрос
Стандартная библиотека Swift предоставляет
Получить первые несколько элементов коллекции можно с помощью использования
📖 В этой статье в прямом смысле наглядно объясняется, что на самом деле скрывает
@iOS Dev
Перед прочтением материала ниже попробуйте ответить:
📊 вот на этот вопрос
Стандартная библиотека Swift предоставляет
ArraySlice
для работы с подмножеством большей коллекции без ненужных расходов на создание копии. Получить первые несколько элементов коллекции можно с помощью использования
range
, но безопаснее использовать метод prefix
, не беспокоясь об исключении out of range
.📖 В этой статье в прямом смысле наглядно объясняется, что на самом деле скрывает
ArraySlice
и как избежать ошибок. @iOS Dev
👍20❤2🔥2💯2⚡1🤩1
10 различных способов реализации перебора в Swift
Один из самых важных элементов программирования, о котором большинство из нас не задумывается — это циклы.
Без них жизнь в мире программирования была бы почти невозможна.
📖 В этом материале приводится несколько коротких фрагментов кода, которые вы можете использовать для реализации: от простых к более сложным.
@iOS Dev
Один из самых важных элементов программирования, о котором большинство из нас не задумывается — это циклы.
Без них жизнь в мире программирования была бы почти невозможна.
📖 В этом материале приводится несколько коротких фрагментов кода, которые вы можете использовать для реализации: от простых к более сложным.
@iOS Dev
👍16🌚4❤3🔥3👏1💯1
Почему использование isEmpty быстрее, чем проверка count == 0?
Чтобы понять, почему
Строки Swift представляют собой сложные наборы символов, в которых несколько символов могут объединяться вместе, образуя одну букву, видимую пользователям.
Например, такой простой смайлик, как британский флаг 🇬🇧, на самом деле состоит из двух разных символов: «G» и «B».
Символы
На самом деле в Swift большая часть сложности спрятана внутри, например, один символ, видимый пользователям, может быть дюжиной базовых значений в самой строке.
Таким образом, когда мы читаем размер строки с помощью count, Swift должен пройти через все символы, чтобы выяснить настоящую длину строки.
📖 В этом материале приводится детальное объяснение смелого заявления на примерах.
@iOS Dev
Чтобы понять, почему
isEmpty
быстрее, чем count == 0
для строк, нам нужно углубиться в то, как строки работают в Swift на самом деле. Строки Swift представляют собой сложные наборы символов, в которых несколько символов могут объединяться вместе, образуя одну букву, видимую пользователям.
Например, такой простой смайлик, как британский флаг 🇬🇧, на самом деле состоит из двух разных символов: «G» и «B».
Символы
Unicode
, если их поставить рядом, автоматически станут британским флагом.На самом деле в Swift большая часть сложности спрятана внутри, например, один символ, видимый пользователям, может быть дюжиной базовых значений в самой строке.
Таким образом, когда мы читаем размер строки с помощью count, Swift должен пройти через все символы, чтобы выяснить настоящую длину строки.
📖 В этом материале приводится детальное объяснение смелого заявления на примерах.
@iOS Dev
👍52🔥9⚡4👏2💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Кастомные анимации переходов между UIViewController с использованием Metal
Довольно часто многие боятся использовать новые API из-за недостатка знаний о том, что может предоставить инструмент, а также из-за отсутствия информации, доступной в Интернете для изучения (иногда это ограничивается скудной документацией Apple).
📖 В этом материале можно узнать, как использовать Metal в приложении, создавая собственные переходы (и анимации).
Ricardo Rachaus рассказывает о своем опыте работы с
🛠 А вот в этом репозитории можно посмотреть код и попробовать создать собственную анимацию.
@iOS Dev
Metal
— это низкоуровневый API для программирования GPGPU (General Purpose Graphics Processing Unit).Довольно часто многие боятся использовать новые API из-за недостатка знаний о том, что может предоставить инструмент, а также из-за отсутствия информации, доступной в Интернете для изучения (иногда это ограничивается скудной документацией Apple).
📖 В этом материале можно узнать, как использовать Metal в приложении, создавая собственные переходы (и анимации).
Ricardo Rachaus рассказывает о своем опыте работы с
Metal
и приводит пример, как применять Metal API в своих приложениях. 🛠 А вот в этом репозитории можно посмотреть код и попробовать создать собственную анимацию.
@iOS Dev
🔥46👍8🆒3👏2🤣2🏆2❤🔥1❤1💯1
AsyncStream в Swift: определение и примеры использования
Вы можете связать свой существующий асинхронный код с новой системой Concurrency Swift, которая использует
Однако в некоторых случаях подход выше не сработает, например, если нужно реализовать: ход загрузки, текущее местоположение пользователя и другие подобные ситуации.
📖 В этом посте объясняется, как можно использовать
@iOS Dev
Вы можете связать свой существующий асинхронный код с новой системой Concurrency Swift, которая использует
async/await
(более подробно можно посмотреть здесь).Однако в некоторых случаях подход выше не сработает, например, если нужно реализовать: ход загрузки, текущее местоположение пользователя и другие подобные ситуации.
📖 В этом посте объясняется, как можно использовать
AsyncStream
для создания кастомных асинхронных последовательностей, которые будут выдавать значения по мере необходимости.@iOS Dev
👍16🔥5👏2❤1🤯1
5 способов передавать данные из UIKit в SwiftUI
Отправка данных из UIKit и SwiftUI может быть довольно непростой, однако существует несколько разных способов сделать это.
🗝 Ключ в том, чтобы найти метод, который лучше всего подходит для вашего проекта и ваших потребностей.
Интеграция SwiftUI и UIKit — это непрерывный процесс, и по мере развития технологий вскоре могут появиться новые методы.
Даже несмотря на то, что многим из нас приходится поддерживать старые версии iOS, будет полезно периодически пополнять базу знаний.
📖 В этом материале автор расскажет о следующих вариантах для передачи данных:
🔘View Initializer.
🔘Observable Objects.
🔘User Defaults.
🔘Environment Object.
🔘Notification Center.
@iOS Dev
Отправка данных из UIKit и SwiftUI может быть довольно непростой, однако существует несколько разных способов сделать это.
🗝 Ключ в том, чтобы найти метод, который лучше всего подходит для вашего проекта и ваших потребностей.
Интеграция SwiftUI и UIKit — это непрерывный процесс, и по мере развития технологий вскоре могут появиться новые методы.
Даже несмотря на то, что многим из нас приходится поддерживать старые версии iOS, будет полезно периодически пополнять базу знаний.
📖 В этом материале автор расскажет о следующих вариантах для передачи данных:
🔘View Initializer.
🔘Observable Objects.
🔘User Defaults.
🔘Environment Object.
🔘Notification Center.
@iOS Dev
👍22❤3🔥3👏3🌚3💯1
URLSession: распространенные ошибки при выполнении задач фоновой загрузки и скачивания
Все, кто так или иначе работал с URLSession, понимают, что иногда возникают сложности при реализации загрузки нескольких файлов или работе в бэкграунде.
Реализация поддержки передачи данных в фоновом режиме сопряжена со множеством подводных камней.
Например, Xcode debugger может помешать в отладке, а реальное устройство, наоборот, помочь.
📖 В этом посте автор делится своим опытом о столкновении с некоторыми распространенными ловушками.
Кстати, рекомендую прочесть про способ ожидания подключения к интернету.
А ещё есть материал о написании API-клиента с использованием async/await.
@iOS Dev
URLSession
позволяет загружать и загружать файлы, когда приложение работает в фоновом режиме. Все, кто так или иначе работал с URLSession, понимают, что иногда возникают сложности при реализации загрузки нескольких файлов или работе в бэкграунде.
Реализация поддержки передачи данных в фоновом режиме сопряжена со множеством подводных камней.
Например, Xcode debugger может помешать в отладке, а реальное устройство, наоборот, помочь.
📖 В этом посте автор делится своим опытом о столкновении с некоторыми распространенными ловушками.
Кстати, рекомендую прочесть про способ ожидания подключения к интернету.
А ещё есть материал о написании API-клиента с использованием async/await.
@iOS Dev
👍24🔥6👏2❤1💯1
Пример работы с async let для параллельного выполнения фоновых задач в Swift
📱Задача для реализации поддержки отзывчивого пользовательского интерфейса — одна из наиболее приоритетных при разработке.
Но бывают такие случаи, когда вызывается несколько методов в фоновом режиме, и по умолчанию эти вызовы выполняются последовательно.
📖 В этом материале на примере имитации загрузки файлов объясняется, как можно использовать
@iOS Dev
📱Задача для реализации поддержки отзывчивого пользовательского интерфейса — одна из наиболее приоритетных при разработке.
async/await
предоставляет чистый механизм для выполнения асинхронных задач. Но бывают такие случаи, когда вызывается несколько методов в фоновом режиме, и по умолчанию эти вызовы выполняются последовательно.
async let
возвращается немедленно, позволяя коду перейти к следующему вызову, и уже затем все возвращенные объекты можно ожидать вместе (используя await
).📖 В этом материале на примере имитации загрузки файлов объясняется, как можно использовать
async let
.@iOS Dev
👍20🔥7😐2❤1👏1🤗1
Шпаргалка по Swift DateFormatter с формулами и примерами
⏳Управление и в целом форматирование дат в Swift — частая задача при разработке.
📖 В этом посте представлены примеры работы с
@iOS Dev
⏳Управление и в целом форматирование дат в Swift — частая задача при разработке.
📖 В этом посте представлены примеры работы с
DateFormatter
, Date
и другими структурами, которые позволяют анализировать, форматировать и извлекать компоненты из дат и строк.@iOS Dev
🔥28👍8❤3👏2🏆1
Пример реализации загрузки файла на сервер без использования сторонних библиотек на Swift
По этой ссылке немного вводной теории:
🌐 Что такое multipart/form-data?
В двух словах, как работает уровень HTTP: вы отправляете некоторые данные с некоторыми заголовками на заданный URL-адрес, используя метод, и в качестве ответа вы получите код состояния, некоторые заголовки и, возможно, что-то вроде данных ответа.
🔘
🔘
📖 В своей статье Tibor Bödecs рассказывает, как реализовать это, используя Swift, и приводит примеры кода.
@iOS Dev
По этой ссылке немного вводной теории:
🌐 Что такое 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🆒2❤1
Вычисление математических выражений с помощью Swift
От научного калькулятора до приложения для работы с электронными таблицами
Арифметические выражения могут быть записаны в одной из трех форм нотаций:
Несмотря на то, что инфиксную нотацию труднее всего обрабатывать на компьютерах, она представляет собой то, как выражения пишутся и распознаются людьми.
Однако, поскольку инфиксные выражения не подходят для простого вычисления, их следует преобразовать либо в префиксную, либо в постфиксную нотацию.
В двух больших материалах Elina Semenko рассказывает о каждом типе нотаций, совершает краткий экскурс в историю, и объясняет на примерах необходимые преобразовнаия, используя Swift.
📖 Первая часть. Преобразование инфиксных выражений в постфиксные выражения.
📖 Вторая часть. Улучшение алгоритма и пример использования NSExpression.
Бонусом рассматривается применение фреймворка
@iOS Dev
От научного калькулятора до приложения для работы с электронными таблицами
Арифметические выражения могут быть записаны в одной из трех форм нотаций:
infix
, prefix
, postfix
.Несмотря на то, что инфиксную нотацию труднее всего обрабатывать на компьютерах, она представляет собой то, как выражения пишутся и распознаются людьми.
Однако, поскольку инфиксные выражения не подходят для простого вычисления, их следует преобразовать либо в префиксную, либо в постфиксную нотацию.
В двух больших материалах Elina Semenko рассказывает о каждом типе нотаций, совершает краткий экскурс в историю, и объясняет на примерах необходимые преобразовнаия, используя Swift.
📖 Первая часть. Преобразование инфиксных выражений в постфиксные выражения.
📖 Вторая часть. Улучшение алгоритма и пример использования NSExpression.
Бонусом рассматривается применение фреймворка
JavaScriptCore
(в чём может быть польза, и почему его стоит использовать в очень редких ситуациях).@iOS Dev
👍13🔥4👏2❤1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация видеоплеера на Swift с помощью RealityKit
Apple продолжает исследование и изредка появляются анонсы об очках за $ 3 000. На мой взгляд, не стоит недооценивать потенциальный пул аудитории, которая захочет (и сможет) их себе позволить, и поэтому для прокачивания этой области изредка можно изучать и обращать внимание на связанные с технологией вещи.
Например, зачем необходим огромный физический телевизор, если вы можете транслировать свой контент на виртуальный, который можно разместить где угодно.
К слову, энтузисты продолжают изучать различные возможности RealityKit, и некоторые вещи реализовать намного проще, чем кажется.
📖 Например, David Cordero показывает, что создать плеер, используя этот фреймворк, совсем несложно.
@iOS Dev
Apple продолжает исследование и изредка появляются анонсы об очках за $ 3 000. На мой взгляд, не стоит недооценивать потенциальный пул аудитории, которая захочет (и сможет) их себе позволить, и поэтому для прокачивания этой области изредка можно изучать и обращать внимание на связанные с технологией вещи.
Например, зачем необходим огромный физический телевизор, если вы можете транслировать свой контент на виртуальный, который можно разместить где угодно.
К слову, энтузисты продолжают изучать различные возможности RealityKit, и некоторые вещи реализовать намного проще, чем кажется.
📖 Например, David Cordero показывает, что создать плеер, используя этот фреймворк, совсем несложно.
@iOS Dev
🔥22👍8❤3👏2🤩2💯1🤗1
Каким будет результат выполнения кода со скриншота выше?
Anonymous Quiz
40%
true
23%
false
1%
nil
27%
Код не скомпилируется
9%
Код скомпилируется, но будет ошибка в рантайме
👍17😐15🔥7🫡3❤1👏1