# Swift в Maguyva: графы кода для iOS и macOS

Canonical source: https://maguyva.ai/ru/languages/swift

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva поддерживает Swift с AST, символами и графом, чтобы ИИ-агенты отслеживали протоколы, расширения, инициализаторы и наблюдатели в коде для iOS и macOS.

## Сводка поддержки

- Уровень: Поддержка AST и символов
- Программирование
- Расширения: .swift
- Настоящий AST-разбор для синтаксически осведомлённого поиска и структурного контекста.
- Именованные символы обеспечивают семантический поиск и перекрёстные ссылки. Навигация по графу доступна, когда включено извлечение связей.
- Этот язык добавляет символы и связи в поиск с учётом графа; поддерживаемые типы рёбер зависят от присущих ему конструкций.
- Доступны и AST-разбор, и извлечение символов.

## Лучше всего подходит

- Команды iOS и macOS с большими таргетами приложений и общими Swift-пакетами.
- Кодовые базы, построенные вокруг протоколов и расширений, где поведение одного типа разбросано по многим файлам.
- Сценарии работы агентов, которым нужен анализ влияния перед изменением общей модели, сервиса или протокола.

## Сценарии работы агента

- Найти все типы, соответствующие протоколу, прежде чем менять одно из его требований.
- Проследить вызывающих метод сервиса через ViewModel, координаторы и пакеты.
- Найти инициализаторы, вычисляемые свойства и наблюдатели `didSet`, которые затрагивают состояние.

## Почему Swift нужен не только поиск по файлам

Swift распределяет один тип по многим местам. Структура объявлена в одном файле, получает поведение из расширений в трёх других и соответствует протоколам, определённым в пакете. Изменения состояния прячутся в вычисляемых свойствах и наблюдателях `willSet` / `didSet`. Агент, читающий по одному файлу, упускает большую часть этого.

Maguyva индексирует эту структуру, чтобы агент видел члены типа, его соответствия протоколам и вызывающих вместе.

## Что Maguyva извлекает из Swift

Maguyva охватывает `.swift`. Вызываемые символы включают функции, `init` и `deinit`, сабскрипты, геттеры и сеттеры вычисляемых свойств, а также наблюдатели `willSet` / `didSet`, поэтому код, меняющий состояние, ищется как символ, а не теряется в телах свойств.

Члены, объявленные в структурах, перечислениях, протоколах и расширениях, квалифицируются типом-владельцем (например, `CartStore.add`), а члены, добавленные в расширении, относятся к расширяемому типу. Из имён определений удаляются обобщённые параметры, списки соответствия протоколам и суффиксы `?` / `!`, поэтому поиск идёт по простому имени. Вызовы сохраняют `self.` и квалификацию классом, а замыкающие замыкания учитываются в арности вызова.

Граф фиксирует вызовы, соответствие протоколам, наследование, переопределения, создание экземпляров, атрибуты, ссылки на типы, чтения и записи, а также рёбра `throw`.

## Примеры промптов для агентов

- «Какие типы соответствуют `PaymentProvider` и где создаётся каждый из них?» (`dependency_search`)
- «Кто вызывает `CartStore.add` и из каких представлений?» (`find_symbol`, затем `dependency_search` incoming)
- «Объясни, как пуш-уведомление попадает на экран входящих.» (`get_task_context`)

## Известные ограничения

- Сопоставляется только исходный код `.swift`. Файлы Storyboard и XIB не входят в список расширений, поэтому связи Interface Builder остаются вне графа.
- Вызовы стандартной библиотеки и Foundation, такие как `print`, `debugPrint`, `NSLog` и утверждения, отфильтровываются из связей и не становятся рёбрами графа. Для них используйте `text_pattern_search`.

## Следующие шаги

Подключите репозиторий по [быстрому старту](/ru/docs/quickstart), затем изучите матрицу поддержки на [странице совместимости](/ru/docs/compatibility). Если тот же продукт выходит и на Android, прочитайте [руководство по Kotlin](/ru/languages/kotlin).

## Детали движка

- Вызываемые символы включают функции, `init`, `deinit`, сабскрипты, геттеры и сеттеры вычисляемых свойств, а также наблюдатели `willSet` / `didSet`.
- Члены структур, перечислений, протоколов и расширений квалифицируются типом-владельцем, например `CartStore.add`.
- Из имён определений удаляются обобщённые параметры, списки соответствия протоколам и суффиксы `?` / `!`, а вызовы сохраняют `self.` и квалификацию классом.

## Полезные точки входа MCP

- `find_symbol`: Используйте с именем типа, протокола или метода, когда нужны определение и ссылки.
- `dependency_search`: Используйте для протокола, чтобы найти соответствующие типы, или в режиме incoming для метода, чтобы найти вызывающих.
- `get_task_context`: Используйте для промптов вроде «объясни, как пуш-уведомление попадает на экран входящих».
