В SwiftUI с iOS 13 появились нативные компоненты для работы с формами ввода данных. Формы обеспечивают стандартизированный внешний вид и организацию элементов управления. Особенно хорошо формы раскрываются при обеспечении доступности и мультиплатформеной поддержке приложения. Формы автоматически адаптируют способ отображения для каждой платформы. Статья-туториал по тому как просто можно накидать универсальную форму со SwiftUI.
Часть модификаторов доступны с iOS 15, 17, 18 - обратите внимание на минимальный таргет приложения прежде чем использовать SwiftUI формы в вашем приложении.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Нашел, наконец, приличный обзор работы Siri с ChatGPT. Спойлер, интеграция пока не идеальна: работает только на английском, нет единого интерфейса, и Siri не понимает длинные запросы на естественном языке. Но давайте по-порядку:
Для себя пока не понял преимущества работы с GPT через Siri, ограничения во взаимодействия между Siri и GPT нивелировали их преимущества. Локальные генеративные AI отстают минимум на год от современных и дико разогревают телефон. Соглашусь с автором, первый блин, явно, вышел комом. Но если интересны примеры использования, советую полистать полную статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В этом году App Intents получили значительные улучшения. Теперь можно глубже интегрировать контент приложения в iOS через Spotlight, Shortcuts и виджеты. Всет это работает через фреймворк App Intents. App Intents является основой для создания возможностей для Apple Intelligence. Новые API для индексирования объектов приложения в Spotlight:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Мы часто ищем способы оптимизации кода, даже там где это не требуется. Но иногда все таки бывают случаи, когда приходится оптимизировать критическую секцию. В статье приводится пример использования формулы Гауса для такой оптимизации.
Карл Фридрих Гаусс предложил формулу для вычисления суммы чисел от 1 до n. Формула имеет постоянную сложность O(1), что делает её очень быстрой. Формула Гаусса работает в 10 625 000 раз быстрее, чем методы loop и reduce. В игровом приложении для отображения таблицы лидеров используется формула Гаусса. Так же можно использовать для поиска пропущенных чисел в последовательности.
Не совсем про Swift, зато полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍5🤔1
Начнем год с прозрачных советов вокруг непрозрачных типов Swift. Протоколы с требованиями
associatedtype
или Self
создают проблемы при использовании в качестве параметров или возвращаемых типов. Исторически разработчики использовали дженерики для обхода этих ограничений, что усложняло код:protocol Store {
associatedtype Item
func persist(item: Item)
}
Протокол Store имеет связанный тип Item. Функция
persist
требует конкретный тип Item
.Использование протокола Store в качестве параметра или возвращаемого типа приведет к ошибке компиляции:
// Error: Protocol 'Store' can only be used as a generic constraint because it has Self or associated type requirements.
func cleanup(store: Store) {}
Определение функции как "дженерик" позволяет обойти проблему:
func cleanup<T: Store>(store: T) {
}
Поддержка такого кода становится сложнее. Непрозрачные же типы упрощают использование протоколов с associatedtype. Функция может быть определена как функция с параметром
some Store
:func cleanup(store: some Store) {
// Simplified function declaration.
}
В этом случае компилятор автоматически подставляет конкретный тип параметра при компиляции.
Непрозрачные типы являются синтаксическим сахаром для универсального кода. Они упрощают взаимодействие с протоколами с associatedtype
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2
Метод жизненного цикла
onAppear
в SwiftUI важен для внедрения ключевой логики при отображении View. Со времен использования UIKit мы привыкли что вызовов методов жизненного цикла всегда предсказуем и последователен. В SwiftUI же, в некоторых сценариях, onAppear
может быть вызван неожиданно и без необходимости, что снижает производительность или даже вызывает неконтролируемые изменения состояния приложения. В статье рассматриваются две проблемы, связанные с вызовом onAppear
в SwiftUI, и предлагаются временные контрмеры:NavigationStack
находится внутри условной ветви, после того как пользователь переходит на новую страницу, а затем меняет состояние ветви (переключается на ветвь, не включающую NavigationStack
), все вызовы onAppear
в корневом View замыкания NavigationStack
(если их несколько) срабатывают ненормально (последняя ссылка onAppear
не должна появляться)NavigationStack
, все вызовы onAppear в представлении Tab AA
срабатывают ненормально, независимо от того, находятся ли они внутри или снаружи контейнера навигации.Причины и последствия
Проблема возникает из-за того, что навигационный контейнер находится внутри условной ветви и выполняет определенные операции. Так работает как минимум до iOS 15. Такие лишние вызовы могут привести к непредсказуемым изменениям в состоянии приложения, особенно при изменении глобального состояния.
Решения:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡3