iOS разработчик, который делится фишками, своим опытом и опытом других. В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки Авторский канал, iOS разработка
infix, prefix, postfix.
Несмотря на то, что инфиксную нотацию труднее всего обрабатывать на компьютерах, она представляет собой то, как выражения пишутся и распознаются людьми.
Однако, поскольку инфиксные выражения не подходят для простого вычисления, их следует преобразовать либо в префиксную, либо в постфиксную нотацию.
В двух больших материалах Elina Semenko рассказывает о каждом типе нотаций, совершает краткий экскурс в историю, и объясняет на примерах необходимые преобразовнаия, используя Swift.
📖 Первая часть. Преобразование инфиксных выражений в постфиксные выражения.
📖 Вторая часть. Улучшение алгоритма и пример использования NSExpression.
Бонусом рассматривается применение фреймворка JavaScriptCore (в чём может быть польза, и почему его стоит использовать в очень редких ситуациях).
@iOS DevHTTP request = Method + URL + Headers + Body (request data)
🔘 HTTP response = Status code + Headers + Body (response data)
📖 В своей статье Tibor Bödecs рассказывает, как реализовать это, используя Swift, и приводит примеры кода.
@iOS DevDateFormatter, Date и другими структурами, которые позволяют анализировать, форматировать и извлекать компоненты из дат и строк.
@iOS Devasync/await предоставляет чистый механизм для выполнения асинхронных задач.
Но бывают такие случаи, когда вызывается несколько методов в фоновом режиме, и по умолчанию эти вызовы выполняются последовательно.
async let возвращается немедленно, позволяя коду перейти к следующему вызову, и уже затем все возвращенные объекты можно ожидать вместе (используя await).
📖 В этом материале на примере имитации загрузки файлов объясняется, как можно использовать async let.
@iOS DevURLSession позволяет загружать и загружать файлы, когда приложение работает в фоновом режиме.
Все, кто так или иначе работал с URLSession, понимают, что иногда возникают сложности при реализации загрузки нескольких файлов или работе в бэкграунде.
Реализация поддержки передачи данных в фоновом режиме сопряжена со множеством подводных камней.
Например, Xcode debugger может помешать в отладке, а реальное устройство, наоборот, помочь.
📖 В этом посте автор делится своим опытом о столкновении с некоторыми распространенными ловушками.
Кстати, рекомендую прочесть про способ ожидания подключения к интернету.
А ещё есть материал о написании API-клиента с использованием async/await.
@iOS Devasync/await (более подробно можно посмотреть здесь).
Однако в некоторых случаях подход выше не сработает, например, если нужно реализовать: ход загрузки, текущее местоположение пользователя и другие подобные ситуации.
📖 В этом посте объясняется, как можно использовать AsyncStream для создания кастомных асинхронных последовательностей, которые будут выдавать значения по мере необходимости.
@iOS DevMetal — это низкоуровневый API для программирования GPGPU (General Purpose Graphics Processing Unit).
Довольно часто многие боятся использовать новые API из-за недостатка знаний о том, что может предоставить инструмент, а также из-за отсутствия информации, доступной в Интернете для изучения (иногда это ограничивается скудной документацией Apple).
📖 В этом материале можно узнать, как использовать Metal в приложении, создавая собственные переходы (и анимации).
Ricardo Rachaus рассказывает о своем опыте работы с Metal и приводит пример, как применять Metal API в своих приложениях.
🛠 А вот в этом репозитории можно посмотреть код и попробовать создать собственную анимацию.
@iOS DevisEmpty быстрее, чем count == 0 для строк, нам нужно углубиться в то, как строки работают в Swift на самом деле.
Строки Swift представляют собой сложные наборы символов, в которых несколько символов могут объединяться вместе, образуя одну букву, видимую пользователям.
Например, такой простой смайлик, как британский флаг 🇬🇧, на самом деле состоит из двух разных символов: «G» и «B».
Символы Unicode, если их поставить рядом, автоматически станут британским флагом.
На самом деле в Swift большая часть сложности спрятана внутри, например, один символ, видимый пользователям, может быть дюжиной базовых значений в самой строке.
Таким образом, когда мы читаем размер строки с помощью count, Swift должен пройти через все символы, чтобы выяснить настоящую длину строки.
📖 В этом материале приводится детальное объяснение смелого заявления на примерах.
@iOS DevArraySlice для работы с подмножеством большей коллекции без ненужных расходов на создание копии.
Получить первые несколько элементов коллекции можно с помощью использования range, но безопаснее использовать метод prefix, не беспокоясь об исключении out of range.
📖 В этой статье в прямом смысле наглядно объясняется, что на самом деле скрывает ArraySlice и как избежать ошибок.
@iOS DevEnum широко используется в в Swift: If case, guard case, fallthrough и протокол CaseIterable.
Все эти термины могут показаться вам знакомыми, если вы много работали с перечислениями.
Очень важно знать об этих возможностях, чтобы улучшить читабельность вашего кода, и, что более важно, чтобы уменьшить количество потенциальных ошибок.
📖 В этом материале на примерах объясняется, как именно можно использовать перечисление в тех или иных случаях.
ℹ️ Кстати, про 3 способа использования enum, которые должны быть в вашем арсенале, можно прочесть здесь.
@iOS DevHealthKit предоставляет центральный репозиторий данных о здоровье и физической форме на iPhone и Apple Watch.
С разрешения пользователя приложения взаимодействуют с HealthKit для доступа к этим данным и обмена ими.
📖 В этом коротком материале объясняется, как сохранить данные и информацию в Apple Health с помощью нескольких строк кода.
🛠 Пример приложения.
@iOS Devprint в коде.
📖 В этом материале автор напоминает про следующие возможности:
🔘 Создание брейкпоинтов для всех проектов в Xcode (автоматически).
🔘 Шаринг брейкпоинтов через git.
🔘 Exception breakpoints c заданным действием отладчика.
🔘 Символические брейкпоинты (при вызове определённого метода). А также приводится пример для отладки проблем, связанных с UICollectionView.
🔘 Test failure breakpoint (при сбое тестов).
@iOS Devclass func animate(withDuration duration: TimeInterval,
animations: @escaping () -> Void)
или фильтра:
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
Существует несколько способов передать замыкание в эти функции.
📖 И об этих способах и пойдет речь в этом материале.
@iOS Dev