# Swift στο Maguyva: γράφοι κώδικα για iOS και macOS

Canonical source: https://maguyva.ai/el/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, σύμβολα και γράφο, ώστε οι πράκτορες AI να παρακολουθούν πρωτόκολλα, επεκτάσεις, αρχικοποιητές και παρατηρητές σε κώδικα iOS και macOS.

## Στιγμιότυπο υποστήριξης

- Επίπεδο: Υποστήριξη AST και συμβόλων
- Προγραμματισμός
- Επεκτάσεις: .swift
- Πραγματική ανάλυση AST για αναζήτηση με επίγνωση σύνταξης και δομικό πλαίσιο.
- Τα επώνυμα σύμβολα τροφοδοτούν τη σημασιολογική αναζήτηση και τη διασταύρωση αναφορών. Η πλοήγηση στον γράφο είναι διαθέσιμη όταν είναι ενεργοποιημένη η εξαγωγή σχέσεων.
- Αυτή η γλώσσα συνεισφέρει σύμβολα και σχέσεις στην αναζήτηση με επίγνωση του γράφου· οι υποστηριζόμενοι τύποι ακμών διαφέρουν ανάλογα με τις εγγενείς δομές της.
- Διατίθενται τόσο ανάλυση AST όσο και εξαγωγή συμβόλων.

## Ιδανική χρήση

- Ομάδες iOS και macOS με μεγάλα targets εφαρμογών και κοινόχρηστα πακέτα Swift.
- Βάσεις κώδικα χτισμένες γύρω από πρωτόκολλα και επεκτάσεις, όπου η συμπεριφορά ενός τύπου είναι σκορπισμένη σε πολλά αρχεία.
- Ροές εργασίας πρακτόρων που χρειάζονται ανάλυση επιπτώσεων πριν αλλάξει ένα κοινόχρηστο μοντέλο, μια υπηρεσία ή ένα πρωτόκολλο.

## Ροές εργασίας πρακτόρων

- Εύρεση κάθε τύπου που συμμορφώνεται σε ένα πρωτόκολλο πριν αλλάξει κάποια από τις απαιτήσεις του.
- Εντοπισμός όσων καλούν μια μέθοδο υπηρεσίας σε ViewModels, συντονιστές και πακέτα.
- Εύρεση των αρχικοποιητών, των υπολογιζόμενων ιδιοτήτων και των παρατηρητών `didSet` που αγγίζουν μια κατάσταση.

## Γιατί η Swift χρειάζεται κάτι περισσότερο από αναζήτηση σε αρχεία

Η Swift απλώνει έναν τύπο σε πολλά σημεία. Ένα struct δηλώνεται σε ένα αρχείο, παίρνει συμπεριφορά από επεκτάσεις σε τρία άλλα και συμμορφώνεται σε πρωτόκολλα που ορίζονται σε ένα πακέτο. Οι αλλαγές κατάστασης κρύβονται σε υπολογιζόμενες ιδιότητες και σε παρατηρητές `willSet` / `didSet`. Ένας πράκτορας που διαβάζει ένα αρχείο τη φορά χάνει τα περισσότερα από αυτά.

Το Maguyva ευρετηριάζει αυτή τη δομή, ώστε ο πράκτορας να βλέπει μαζί τα μέλη ενός τύπου, τις συμμορφώσεις του και όσους τον καλούν.

## Τι εξάγει το Maguyva από τη Swift

Το Maguyva καλύπτει `.swift`. Τα καλέσιμα σύμβολα περιλαμβάνουν συναρτήσεις, `init` και `deinit`, subscripts, getters και setters υπολογιζόμενων ιδιοτήτων, καθώς και παρατηρητές `willSet` / `didSet`, ώστε ο κώδικας που αλλάζει κατάσταση να αναζητείται ως σύμβολο και όχι να χάνεται μέσα στα σώματα των ιδιοτήτων.

Τα μέλη που δηλώνονται σε structs, enums, πρωτόκολλα και επεκτάσεις προσδιορίζονται από τον τύπο-κάτοχό τους (για παράδειγμα `CartStore.add`), και τα μέλη που προστίθενται σε μια επέκταση αποδίδονται στον τύπο που επεκτείνεται. Από τα ονόματα ορισμών αφαιρούνται οι γενικές παράμετροι, οι λίστες συμμόρφωσης σε πρωτόκολλα και οι κατάληξεις `?` / `!`, οπότε οι αναζητήσεις χρησιμοποιούν το απλό όνομα. Οι κλήσεις διατηρούν το `self.` και τον προσδιορισμό κλάσης, και τα τελικά κλεισίματα μετρούν στον αριθμό ορισμάτων της κλήσης.

Ο γράφος καταγράφει κλήσεις, συμμόρφωση σε πρωτόκολλα, κληρονομικότητα, επικαλύψεις, δημιουργία στιγμιοτύπων, attributes, αναφορές τύπων, αναγνώσεις και εγγραφές, καθώς και ακμές `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`.

## Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον [γρήγορο οδηγό εκκίνησης](/el/docs/quickstart) και έπειτα δείτε τον πίνακα υποστήριξης στη [σελίδα συμβατότητας](/el/docs/compatibility). Αν διαθέτετε το ίδιο προϊόν και σε Android, διαβάστε τον [οδηγό για την Kotlin](/el/languages/kotlin).

## Λεπτομέρειες μηχανής

- Τα καλέσιμα σύμβολα περιλαμβάνουν συναρτήσεις, `init`, `deinit`, subscripts, getters και setters υπολογιζόμενων ιδιοτήτων και παρατηρητών `willSet` / `didSet`.
- Τα μέλη των structs, των enums, των πρωτοκόλλων και των επεκτάσεων προσδιορίζονται από τον τύπο-κάτοχό τους, όπως το `CartStore.add`.
- Από τα ονόματα ορισμών αφαιρούνται οι γενικές παράμετροι, οι λίστες συμμόρφωσης σε πρωτόκολλα και οι καταλήξεις `?` / `!`, ενώ οι κλήσεις διατηρούν το `self.` και τον προσδιορισμό κλάσης.

## Χρήσιμα σημεία εισόδου MCP

- `find_symbol`: Χρησιμοποιήστε το με όνομα τύπου, πρωτόκολλο ή μεθόδου όταν χρειάζεστε τον ορισμό και τις αναφορές.
- `dependency_search`: Χρησιμοποιήστε το σε ένα πρωτόκολλο για να βρείτε τους τύπους που συμμορφώνονται, ή με κατεύθυνση incoming σε μια μέθοδο για να βρείτε τους καλούντες.
- `get_task_context`: Χρησιμοποιήστε το για προτροπές όπως «εξήγησε πώς μια ειδοποίηση ώθησης φτάνει στην οθόνη των εισερχομένων».
