# Swift-tuki Maguyva-palvelussa: koodigraafit iOS:lle ja macOS-alustalle

Canonical source: https://maguyva.ai/fi/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 tukee Swiftiä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata iOS- ja macOS-koodin protokollia, laajennuksia, alustajia ja tarkkailijoita.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .swift
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- iOS- ja macOS-tiimit, joilla on suuria sovelluskohteita ja jaettuja Swift-paketteja.
- Protokollien ja laajennusten ympärille rakennetut koodikannat, joissa yhden tyypin toiminta on hajallaan monessa tiedostossa.
- Agenttityönkulut, jotka tarvitsevat vaikutusanalyysin ennen jaetun mallin, palvelun tai protokollan muuttamista.

## Agenttien työnkulut

- Löytää kaikki protokollan täyttävät tyypit ennen kuin jotakin sen vaatimusta muutetaan.
- Jäljittää palvelumetodin kutsujat ViewModelien, koordinaattorien ja pakettien läpi.
- Paikantaa alustajat, lasketut ominaisuudet ja `didSet`-tarkkailijat, jotka koskevat tiettyä tilaa.

## Miksi Swift tarvitsee muutakin kuin tiedostohakua

Swift levittää yhden tyypin moneen paikkaan. Rakenne esitellään yhdessä tiedostossa, se saa toimintaa laajennuksista kolmessa muussa ja täyttää paketissa määriteltyjä protokollia. Tilamuutokset piiloutuvat laskettuihin ominaisuuksiin ja `willSet` / `didSet`-tarkkailijoihin. Tiedoston kerrallaan lukeva agentti ohittaa suurimman osan tästä.

Maguyva indeksoi rakenteen, jotta agentti näkee tyypin jäsenet, protokollien täyttämiset ja kutsujat yhdessä.

## Mitä Maguyva poimii Swiftistä

Maguyva kattaa tiedostot `.swift`. Kutsuttaviin symboleihin kuuluvat funktiot, `init` ja `deinit`, alaindeksit, laskettujen ominaisuuksien getterit ja setterit sekä `willSet` / `didSet`-tarkkailijat, joten tilaa muuttavaa koodia voi hakea symboleina sen sijaan, että se hautautuisi ominaisuuksien runkoihin.

Rakenteissa, luettelotyypeissä, protokollissa ja laajennuksissa esitellyt jäsenet tarkennetaan omistavalla tyypillä (esimerkiksi `CartStore.add`), ja laajennuksessa lisätyt jäsenet kohdistetaan laajennettavaan tyyppiin. Määrittelyjen nimistä poistetaan geneeriset parametrit, protokollaluettelot ja jälkiliitteet `?` / `!`, joten haut käyttävät pelkkää nimeä. Kutsut säilyttävät `self.`-etuliitteen ja luokkatarkennuksen, ja jälkisulkeumat lasketaan mukaan kutsun ariteettiin.

Graafi tallentaa kutsut, protokollien täyttämisen, periytymisen, ylikirjoitukset, ilmentymien luonnin, attribuutit, tyyppiviittaukset, luvut ja kirjoitukset sekä `throw`-kaaret.

## Esimerkkikehotteita agenteille

- "Mitkä tyypit täyttävät protokollan `PaymentProvider`, ja missä kukin niistä luodaan?" (`dependency_search`)
- "Kuka kutsuu metodia `CartStore.add`, ja mistä näkymistä?" (`find_symbol`, sitten `dependency_search` incoming)
- "Selitä, miten push-ilmoitus päätyy saapuneiden viestien näkymään." (`get_task_context`)

## Tunnetut rajoitukset

- Vain `.swift`-lähdekoodi on liitetty. Storyboard- ja XIB-tiedostot eivät ole tiedostopäätteiden luettelossa, joten Interface Builderin kytkennät jäävät graafin ulkopuolelle.
- Standardikirjaston ja Foundationin kutsut, kuten `print`, `debugPrint`, `NSLog` ja assertiot, suodatetaan pois suhteista, joten ne eivät ole graafin kaaria. Käytä niihin työkalua `text_pattern_search`.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Jos julkaiset saman tuotteen myös Androidille, lue [Kotlin-opas](/fi/languages/kotlin).

## Moottorin yksityiskohdat

- Kutsuttaviin symboleihin kuuluvat funktiot, `init`, `deinit`, alaindeksit, laskettujen ominaisuuksien getterit ja setterit sekä `willSet` / `didSet`-tarkkailijat.
- Rakenteiden, luettelotyyppien, protokollien ja laajennusten jäsenet tarkennetaan omistavalla tyypillä, esimerkiksi `CartStore.add`.
- Määrittelyjen nimistä poistetaan geneeriset parametrit, protokollaluettelot ja jälkiliitteet `?` / `!`, ja kutsut säilyttävät `self.`-etuliitteen ja luokkatarkennuksen.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä tyypin, protokollan tai metodin nimellä, kun tarvitset määrittelyn ja viittaukset.
- `dependency_search`: Käytä sitä protokollaan löytääksesi sen täyttävät tyypit tai incoming-suuntaan metodiin löytääksesi kutsujat.
- `get_task_context`: Käytä sitä kehotteisiin kuten "selitä, miten push-ilmoitus päätyy saapuneiden viestien näkymään".
