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 avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Jos julkaiset saman tuotteen myös Androidille, lue Kotlin-opas.