Swift 101 - κλάσεις, μεταβλητές, ιδιότητες & μέθοδοι

Όπως υποσχέθηκε, εδώ είναι η πρώτη δόση μου για να μάθω να προγραμματίζω στη νέα γλώσσα Swift!

Ορισμός κατηγοριών σε Swift

Ο παρακάτω κώδικας δείχνει ένα παράδειγμα ορισμού κλάσης Swift:

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

Στο Swift, οι κλάσεις ορίζονται σε ένα αρχείο πηγαίου κώδικα .swift σε σύγκριση με το αντικείμενο-C, όπου οι κλάσεις ορίζονται σε δύο ξεχωριστά αρχεία, ένα αρχείο κεφαλίδας (.h) και ένα αρχείο εφαρμογής (.m).

Δηλώνοντας μεταβλητές

Ο παρακάτω κώδικας δείχνει ένα παράδειγμα δήλωσης μεταβλητής:

Ξεκινάτε μια μεταβλητή δήλωση με τη λέξη var, ακολουθούμενη από το όνομα της μεταβλητής. Στη συνέχεια, προσθέτετε ένα τελεία, ακολουθούμενο από τον τύπο μεταβλητής. Στη συνέχεια, μπορείτε να ορίσετε μια τιμή στη μεταβλητή χρησιμοποιώντας τον χειριστή (=) εκχώρησης.

Στο Swift, εάν εκχωρήσετε μια αρχική τιμή σε μια μεταβλητή, δεν χρειάζεται να καθορίσετε τον τύπο της μεταβλητής όπως φαίνεται στον ακόλουθο κώδικα:

Μπορείτε να το κάνετε αυτό επειδή το Swift έχει κάτι που ονομάζεται συμπεράσματος τύπου όπου μπορεί να καταλάβει ή να συμπεράνει τον τύπο της μεταβλητής με βάση την τιμή που την εκχωρείτε.

Στο Objective-C μπορείτε να δηλώσετε μεταβλητές στιγμιότυπων σε επίπεδο κλάσης και τοπικές μεταβλητές μέσα σε μεθόδους. Στο Swift, δεν υπάρχουν μεταβλητές σε επίπεδο κλάσης - μόνο τοπικές μεταβλητές που δηλώνετε μέσα σε μεθόδους. Ωστόσο, μπορείτε να δηλώσετε ιδιότητες σε επίπεδο κλάσης (δείτε την ενότητα Δηλώνοντας Ιδιότητες παρακάτω.)

Το τέλος του αστερίσκου

Στο Στόχο-C χρησιμοποιείτε έναν αστερίσκο για να υποδείξετε ότι μια μεταβλητή διατηρεί έναν δείκτη σε ένα αντικείμενο. Στο Swift, μια σταθερά ή μια μεταβλητή μπορεί να περιέχει έναν δείκτη σε μια διεύθυνση στη μνήμη (αν και δεν είναι ένας άμεσος δείκτης), αλλά ποτέ δεν χρειάζεται να χρησιμοποιήσετε έναν αστερίσκο στο πλαίσιο αυτό.

Δηλώνοντας απλές ιδιότητες

Ο παρακάτω κώδικας δείχνει ένα παράδειγμα δήλωσης ιδιοκτησίας:

Όπως μπορείτε να δείτε, είναι πολύ παρόμοιο με τη δήλωση μιας μεταβλητής, εκτός από το ότι δηλώνετε μια ιδιότητα σε επίπεδο κλάσης και όχι μέσα σε μια μέθοδο.

Όπως και με τις μεταβλητές, εάν εκχωρήσετε μια αρχική τιμή σε μια ιδιότητα, δεν χρειάζεται να καθορίσετε τον τύπο της ιδιότητας. Μπορείτε επίσης να αρχικοποιήσετε τις ιδιότητες από τις μεθόδους αρχικοποίησης (για περισσότερες λεπτομέρειες, ανατρέξτε στην ενότητα που ακολουθεί παρακάτω). Ο παρακάτω κώδικας δείχνει ένα παράδειγμα δήλωσης μιας ιδιότητας χωρίς να προσδιορίζεται ένας τύπος:

Στο Objective-C, οι ιδιότητες είχαν συνήθως υποστηρικτικές μεταβλητές instance στις οποίες αποθηκεύτηκε η πραγματική τιμή της ιδιότητας. Το Swift απλοποιεί τις ιδιότητες ενοποιώντας τις έννοιες ιδιοτήτων και μεταβλητών στιγμιότυπων. Οι ιδιότητες δεν έχουν πλέον μια μεταβλητή εμφάνισης υποστήριξης. Τα πάντα για ένα ακίνητο δηλώνονται σε μία θέση.

Στο Swift, δεν χρειάζεται να χρησιμοποιήσετε την αυτο -λέξη-κλειδί για να αναφερθείτε σε μια ιδιότητα εκτός εάν η μέθοδος στην οποία γράφετε κώδικα έχει μια παράμετρο με το ίδιο όνομα με την ιδιότητα.

Δηλώνει υπολογιστικές ιδιότητες

Το Swift έχει επίσης υπολογίσει ιδιότητες που έχουν συσχετίσει τις μεθόδους get και set όπως φαίνεται στον παρακάτω κώδικα:

Σε αυτό το παράδειγμα, η κλάση Θερμόμετρου έχει μια απλή ιδιότητα θερμοκρασίαςFahrenheit και μια υπολογισμένη ιδιοκαταβατική ιδιότητα.

Παρατηρήστε ότι οι μέθοδοι get και set της κλάσης του θερμόμετρου δεν αναφέρονται σε μια μεταβλητή instance, επειδή δεν υπάρχει καμία τέτοια μεταβλητή instance στο Swift!

Σε αυτή την περίπτωση, η μέθοδος get ανακτά την τιμή από την ιδιότητα temperatureFahrenheit, την μετατρέπει σε Celsius και επιστρέφει την τιμή. Η μέθοδος που έχει οριστεί παίρνει την τιμή που μεταβιβάζεται σ 'αυτήν, μετατρέπει την σε Fahrenheit και στη συνέχεια αποθηκεύει το αποτέλεσμα στην ιδιότητα temperatureFahrenheit .

Η τιμή που μεταβιβάζεται στη μέθοδο set της ιδιότητας αποθηκεύεται σε μια παράμετρο που ονομάζεται implicitly called newValue . Εάν θέλετε να χρησιμοποιήσετε ένα διαφορετικό όνομα παραμέτρου, μπορείτε να καθορίσετε το όνομα σε παρένθεση μετά το σύνολο όπως φαίνεται στον ακόλουθο κώδικα:

Ο προσδιορισμός ενός ονόματος παραμέτρου μπορεί να καταστήσει τον κωδικό σας πιο κατανοητό. Σε αυτό το παράδειγμα, ο καθορισμός του ονόματος της παραμέτρου σε celsiusValue καθιστά σαφέστερο ότι η μέθοδος που έχει οριστεί μετατρέπει την τιμή από το Κελσίου στο Φαρενάιτ.

Δηλώνοντας μεθόδους

Ο παρακάτω κώδικας περιέχει παράδειγμα δήλωσης μεθόδου Swift:

Όπως και με τον Στόχο-C, στο Swift, δηλώνετε μια μέθοδο εμφάνισης μεταξύ των στρογγυλών αγκυλών ανοίγματος και κλεισίματος της κλάσης στην οποία ανήκει.

Για να δηλώσετε μια μέθοδο, καθορίζετε πρώτα τη λέξη-κλειδί func, ακολουθούμενη από το όνομα της μεθόδου. Εάν η μέθοδος έχει παραμέτρους, μπορείτε να τις συμπεριλάβετε στις παρενθέσεις. Για κάθε παράμετρο, καθορίζετε το όνομα της παραμέτρου που ακολουθείται από ένα τελεία, ακολουθούμενο από τον τύπο της. Αν η μέθοδος έχει μια τιμή επιστροφής, τότε προσθέτετε παύλα και μεγαλύτερο από το σύμβολο ( -> ) ακολουθούμενο από τον τύπο της τιμής επιστροφής.

Ο παρακάτω κώδικας περιέχει ένα παράδειγμα μιας μεθόδου που δεν δέχεται παραμέτρους και δεν επιστρέφει τίποτα:

Όπως μπορείτε να δείτε, απαιτούνται παρενθέσεις μετά το όνομα της μεθόδου, ακόμη και αν δεν υπάρχουν παράμετροι. Μια μέθοδος που δεν επιστρέφει τίποτα δεν χρειάζεται την ένδειξη τιμής επιστροφής ( -> ) μετά τις παρενθέσεις.

Μέθοδοι αρχικοποίησης

Ο παρακάτω κώδικας περιέχει ένα παράδειγμα μιας μεθόδου αρχικοποίησης που χρησιμοποιείται για την αρχικοποίηση μιας κλάσης.

Οι μέθοδοι αρχικοποίησης ονομάζονται πάντοτε init και, αντίθετα από τον Στόχο-C, δεν επιστρέφουν ποτέ τιμή. Στο παραπάνω παράδειγμα, η μέθοδος init δέχεται μια παράμετρο τρέχουσας θερμοκρασίας στην οποία μπορείτε να περάσετε την αρχική θερμοκρασία. Αυτή η τιμή αποθηκεύεται στην ιδιότητα temperatureFahrenheit .

Μπορείτε να δημιουργήσετε πολλαπλές μεθόδους ενοποίησης, όπως φαίνεται στο ακόλουθο δείγμα κώδικα:

Σε αυτό το παράδειγμα, και οι δύο μέθοδοι ονομάζονται init, έτσι ώστε να γίνουν τα ονόματα μοναδικά, ένα εξωτερικό όνομα αποδίδεται στις παραμέτρους - από το Fahrenheit και από τον Celsius . Αυτό καθιστά τα πλήρη ονόματα μεθόδων init (από Φαρενάιτ :) και init (απόCelsius :) αντίστοιχα.

Αξίζει να σημειωθεί ότι στο Swift, οι μέθοδοι init δεν κληρονομούνται. Από πρακτική άποψη, αυτό σημαίνει ότι δεν πρέπει να τοποθετείτε κανέναν κώδικα σε μια μέθοδο init που θέλετε να μπορείτε να παρακάμψετε σε μια υποκατηγορία. Αν έχετε κωδικό που θέλετε να εκτελεστεί κατά τη διάρκεια της φάσης init μιας κλάσης και θέλετε να μπορείτε να αντικαταστήσετε αυτόν τον κώδικα σε μια υποκατηγορία, μπορείτε να δημιουργήσετε μια ξεχωριστή μέθοδο, να τοποθετήσετε τον κώδικα προετοιμασίας σε αυτήν τη μέθοδο και, στη συνέχεια, να καλέσετε αυτήν τη μέθοδο από την init .

Δημιουργία ενός στιγμιότυπου μιας κλάσης

Ακολουθεί ένα παράδειγμα για τον τρόπο δημιουργίας μιας παρουσίας μιας κλάσης:

Όπως μπορείτε να δείτε, για να δημιουργήσετε μια εμφάνιση μιας κλάσης, δηλώνετε μια μεταβλητή που κρατάει μια αναφορά στην κλάση, πληκτρολογήστε ένα ισοδύναμο σημάδι (τον τελεστή εκχώρησης) και στη συνέχεια το όνομα της κλάσης που ακολουθείται από παρενθέσεις.

συμπέρασμα

Αυτά είναι μερικά από τα βασικά στοιχεία που πρέπει να ξέρετε για να ξεκινήσετε με τον προγραμματισμό Swift. Στις επερχόμενες θέσεις θα κατακλυσθώ βαθύτερα στη γλώσσα για να σας βοηθήσω να γίνετε καταρτισμένοι με τη νέα σύνταξη και δομή του Swift.