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

Canonical source: https://maguyva.ai/uk/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`.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Якщо той самий продукт виходить і на Android, прочитайте [посібник із Kotlin](/uk/languages/kotlin).

## Деталі рушія

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

## Корисні точки входу MCP

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