TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #451 1.02K
🔢 iOS 27: что нового в SwiftData.

С момента появления SwiftData разработчики периодически сталкивались с ограничениями. Фильтрация по enum требовала костылей. Группировка данных в секции была недоступна. Наблюдение за изменениями вне SwiftUI View - сложной задачей. В iOS 27 компания Apple закрыла большинство этих пробелов. Разберем ключевые улучшения.


Enum-предикаты стали реальностью:

До iOS 27 фильтрация по enum-свойствам была больной темой. Если модель содержала enum, приходилось сохранять его raw-значение в отдельное поле и строить предикаты уже на основе него. Теперь это работает напрямую.


_books = Query(filter: #Predicate<Book> {
$0.category == .fiction
})


Модель становится чище. Не нужно дублировать данные только для фильтрации.


Группировка в секции:

Появилась поддержка группировки результатов через параметр sectionBy в макросе @Query.


@Query(sort: \Expense.name, sectionBy: \Expense.budgetName)
var expenses: [Expense]


При этом данные группируются прямо в базе, а не в памяти. Есть ограничение: значение для группировки должно быть сохраненным свойством. Связанные свойства (например, expense.budget?.name) пока не поддерживаются. Приходится дублировать данные.


Составные предикаты:

Раньше, чтобы объединить несколько условий, нужно было собрать все в один большой предикат. Сейчас появились Predicate(all:) и Predicate(any:).


let searchPredicate = #Predicate<Book> {
$0.name.localizedStandardContains(search)
}

let bestSellerPredicate = #Predicate<Book> {
$0.isBestSeller == isBestSeller
}

_books = Query(
filter: Predicate(all: [searchPredicate, bestSellerPredicate])
)


Удобно для динамических фильтров. Предикаты можно собирать по частям и комбинировать.


Атрибут .codable:

Новый параметр для макроса @Attribute. Если тип нельзя разложить на колонки, но он реализует Codable, SwiftData может сохранить его как BLOB.


@Attribute(.codable)
var identifier: MKMapItem.Identifier


Важный нюанс: данные, сохраненные через .codable, нельзя использовать в фильтрах и сортировках. Это просто сериализованный кусок данных.


🔗 Читать подробнее


💡 Вывод:

SwiftData в iOS 27 стала более практичной. Меньше костылей, больше возможностей. Enum-предикаты убирают дублирование. Секции упрощают представление данных. .codable закрывает проблему со сложными типами. ResultsObserver позволяет строить логику на изменениях без привязки к UI.

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

Но еще не все проблемы решены. Группировка по связанным свойствам до сих пор не работает. Хранилище изменений через HistoryObserver требует ручной работы с токенами. Но направление верное.


Подписаться на канал:
➡️ Telegram | Max
  • 👍 5
  • 🙏 2
  • ❤ 1
  • 🔥 1
More from @hardworkerit
  1. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  2. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
  3. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
  4. Sep 24, 2026👨‍💻 Почему разработчики ненавидят своих менеджеров. Всем привет! Сегодня хочу разобрать…
  5. Sep 22, 2026🔢 Релиз Swift 6.4: главные изменения для разработчиков. Swift 6.4 вышел. Это обновление п…
  6. Sep 20, 2026📱 Официальный симулятор iPhone Duo уже доступен в Xcode 27.1 В бета-версии Xcode 27.1 поя…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →