Apple mostrou como as macros @Generable e @Guide no FoundationModels simplificam o desenvolvimento em Swift
A Apple mostrou como o FoundationModels encurta o caminho do prompt até uma estrutura de dados pronta. A macro @Generable marca um modelo Swift como apto para g
Во фреймворке FoundationModels для Swift появились макросы @Generable и @Guide, которые превращают описание структуры данных в инструкцию для языковой модели. Разработчик задаёт типы и свойства один раз, а дальше модель может возвращать уже готовые объекты вместо сырого текста.
Что делает макрос
Главная идея @Generable проста: разработчик помечает структуру Swift как пригодную для генерации, а компилятор подготавливает всё необходимое, чтобы языковая модель могла создавать экземпляры этого типа и отдавать их потоково. В примере из статьи такой структурой становится элемент списка покупок с идентификатором и текстовым значением. Вместо свободного текста приложение сразу получает объекты заранее известной формы, с которыми можно работать как с обычными моделями интерфейса.
Если добавить к макросу описание, например попросить генерировать элементы для списка покупок, модель получает дополнительный контекст и точнее понимает задачу. Такой подход делает код более декларативным: структура данных одновременно становится и моделью интерфейса, и контрактом для генерации. Для команд, которые уже строят архитектуру вокруг строгих типов Swift, это убирает часть шаблонного кода между промптом, разбором ответа и реальным использованием данных в приложении.
Контроль на уровне полей Если общего описания недостаточно, в дело вступает @Guide.
Этот макрос ставится на отдельные свойства и даёт модели локальные подсказки по содержимому конкретного поля. В примере из материала он используется для поля value, чтобы явно указать: здесь должно быть название продукта для покупки. Это особенно полезно в моделях, где по одному имени свойства не всегда понятно, какие данные ожидаются на выходе и в каком виде их лучше вернуть.
помогает уточнить смысл каждого поля без ручных инструкций в промпте снижает двусмысленность при генерации структурированных данных повышает шанс, что модель вернёт содержимое в нужной форме позволяет описывать ожидания рядом с кодом модели, а не в отдельной логике В результате @Guide работает как тонкая настройка поверх @Generable. Сначала разработчик задаёт общую форму ответа, а затем при необходимости подсказывает, как именно заполнять отдельные части структуры. Для Swift-разработки это удобнее, чем хранить длинные текстовые инструкции отдельно, дублировать их в разных местах и затем пытаться стабильно разобрать результат, который каждый раз может немного отличаться, особенно при сложных схемах данных и вложенных моделях.
Интеграция в SwiftUI После объявления модели её можно напрямую использовать в LanguageModelSession.
В статье показан сценарий, где приложение отправляет запрос на генерацию пятнадцати элементов списка покупок и получает потоковый ответ в виде массива объектов ShoppingItem. По мере прихода новых порций данных код проходит по ним, проверяет наличие нужных значений и обновляет состояние интерфейса. Генерация здесь встраивается в обычный цикл работы приложения и не требует отдельного слоя для последующей ручной обработки текста.
На уровне SwiftUI пример тоже предельно прикладной: список показывает уже сгенерированные элементы, а кнопка в нижней панели запускает генерацию и блокируется, пока запрос выполняется. Отдельно важен сам формат ответа — не один большой текст в конце, а поток чанков, который можно отображать постепенно. Для пользователя это означает более живое поведение интерфейса, а для разработчика — предсказуемые объекты, которые можно сразу хранить в состоянии, отдавать в List и использовать в дальнейшей бизнес-логике.
Что это значит
Макросы @Generable и @Guide показывают, как Apple делает работу с LLM в Swift ближе к привычной модели разработки: описал тип, добавил контекст, получил структурированный результат. Для iOS и macOS-команд это важный сдвиг, потому что он переносит часть логики из хрупких текстовых промптов в типизированный код и делает интеграцию генеративных функций заметно практичнее для реальных продуктовых сценариев и обычных приложений, а не только для демо.