Σε αυτό το άρθρο, θα μάθετε να χρησιμοποιείτε τη δήλωση φύλαξης για να ελέγχετε τη ροή της εκτέλεσης του προγράμματος.
Το Swift If Statement περιγράφει πώς μπορείτε να εκτελέσετε ενέργειες βάσει συγκεκριμένης συνθήκης (boolean value). Σε αυτό το άρθρο, θα διερευνήσουμε τα πλεονεκτήματα της δήλωσης φύλαξης εάν η δήλωση για τον έλεγχο της ροής του προγράμματος και θα γράψουμε πιο απλούστερο και καθαρό κώδικα.
Δήλωση Swift Guard
Η κύρια χρήση της δήλωσης φρουράς είναι να μεταφέρει τον έλεγχο του προγράμματος εκτός πεδίου εφαρμογής υπό ορισμένες προϋποθέσεις. Αυτές οι δηλώσεις είναι παρόμοιες με τις δηλώσεις που εκτελούν δηλώσεις που βασίζονται σε συγκεκριμένη συνθήκη (boolean value), αλλά σε αντίθεση με το εάν, οι δηλώσεις φύλαξης εκτελούνται μόνο όταν δεν πληρούνται ορισμένες προϋποθέσεις.
Επιπλέον, οι δηλώσεις εντός του προφυλακτήρα πρέπει να βγούν από το πεδίο εφαρμογής. Ως εκ τούτου, θα πρέπει να δηλώσεις τον έλεγχο του προγράμματος του χρήστη return
, break
, continue
ή throw
στο τέλος της δήλωσης φρουράς.
Σύνταξη της δήλωσης φρουράς
guard express else (// statement // πρέπει να περιέχει μια δήλωση ελέγχου: επιστροφή, διακοπή, συνέχιση ή ρίψη.)
- Εδώ, η έκφραση είναι μια δυαδική έκφραση (επιστρέφει είτε
true
είτεfalse
). - Εάν αξιολογηθεί η έκφραση
false
,guard
εκτελούνται δηλώσεις εντός του μπλοκ κώδικα του . - Εάν αξιολογηθεί η έκφραση
true
, οι δηλώσεις εντός του μπλοκ κώδικα τουguard
παραλείπονται από την εκτέλεση.
Πώς λειτουργεί η δήλωση φρουράς;
Σημείωση: Το τέλος της δήλωσης φρουράς πρέπει να περιέχει δήλωση ελέγχου return
, break
, continue
ή throw
.
Παράδειγμα 1: Πώς λειτουργεί η δήλωση φρουράς;
Μια απλή έγκυρη δήλωση φύλαξης έχει ως εξής:
guard true else ( print("Condition not met") ) print("Condition met")
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Η συνθήκη πληροί
Στο παραπάνω πρόγραμμα, το guard περιέχει μια τιμή boolean true (πληρούται η συνθήκη). Επειδή, οι δηλώσεις φύλαξης εκτελούνται μόνο όταν δεν πληρούται η συνθήκη, η δήλωση μέσα στο φύλακα δεν εκτελείται. Γι ' print("Condition met")
αυτό εκτελείται και οι συνθήκες εξέρχονται στην οθόνη.
Τώρα ας αλλάξουμε την κατάσταση σε false ως:
Παράδειγμα 2: η δήλωση φύλαξης πρέπει να βγεί από το πεδίο εφαρμογής
guard false else ( print("Condition not met") ) print("Condition met")
Στο παραπάνω πρόγραμμα, η κατάσταση φρουράς αξιολογείται ως false
. Έτσι, η δήλωση print("Condition not met")
μέσα σε άλλο θα πρέπει να εκτελεστεί. Ωστόσο, θα εμφανιστεί ένα σφάλμα που λέει ότι το σώμα «φρουράς» ενδέχεται να μην πέσει, σκεφτείτε να χρησιμοποιήσετε ένα «επιστροφή» ή «ρίξτε» για να βγείτε από το πεδίο εφαρμογής.
Το μήνυμα σφάλματος με απλά μέσα λέξη, θα πρέπει να μεταφέρει τον έλεγχο του προγράμματος από τη δήλωση φρουρά, χρησιμοποιώντας return
, break
, continue
ή throw
δηλώσεις. Προς το παρόν πρόκειται να χρησιμοποιήσουμε return
. Και δεδομένου ότι η return
δήλωση μπορεί να χρησιμοποιηθεί μόνο μέσα σε μια συνάρτηση, πρόκειται να τυλίξουμε τον παραπάνω κώδικα στο Swift Functions.
Παράδειγμα 3: δήλωση προστασίας μέσα σε μια συνάρτηση
Μπορούμε να χρησιμοποιήσουμε τη δήλωση προστασίας μέσα σε μια συνάρτηση στο Swift ως:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:
Η συνθήκη δεν ικανοποιήθηκε Γεια σας μετά την κλήση λειτουργίας
Στο παραπάνω πρόγραμμα, η κατάσταση φύλακα αξιολογείται false
, επομένως εκτελούνται οι δηλώσεις εντός του φύλακα. Η πρώτη δήλωση print("Condition not met")
εξάγει την κατάσταση που δεν πληρούται στην κονσόλα.
Και η δήλωση return
τερματίζει την εκτέλεση μιας συνάρτησης και η δήλωση print("Hello, after function call")
μετά την εκτέλεση της κλήσης συνάρτησης που εξάγει Γεια μετά από κλήση συνάρτησης στην κονσόλα.
Παράδειγμα 4: Φρουρά με προαιρετικά
Έχουμε δει στο Swift Optionals τη χρήση του if-let
για να ξετυλίξετε ένα προαιρετικό. Ωστόσο, μπορούμε επίσης να χρησιμοποιήσουμε τη δήλωση φύλαξης στη θέση του if-let
για την αποσυσκευασία ενός προαιρετικού με ένα πλεονέκτημα. Το κύριο πλεονέκτημα της αποσυσκευασίας ενός προαιρετικού με προφυλακτήρα αντί if-let
είναι ότι μπορούμε να αυξήσουμε το εύρος της μη τυλιγμένης μεταβλητής.
Ας το δούμε στο παρακάτω παράδειγμα:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:
Το όνομα είναι μηδέν. Δεν είναι δυνατή η επεξεργασία
Στο παραπάνω πρόγραμμα, μπορείτε να δείτε ότι η μη τυλιγμένη θερμοκρασία χρησιμοποιείται εκτός του πεδίου εφαρμογής που ορίζεται από τη δήλωση φύλαξης. Δεδομένου ότι, το όνομα ορίζεται προαιρετικό και περιέχει μηδενική τιμή, η δήλωση φύλακα αποτυγχάνει να ξετυλίξει την τιμή.
Λοιπόν, οι δηλώσεις εντός του guard other εκτελούν το οποίο τυπώνει το Name is nil. Δεν είναι δυνατή η επεξεργασία στην έξοδο και τερματίζει τη λειτουργία με return
δήλωση. Ο ισοδύναμος κωδικός της παραπάνω δήλωσης φύλαξης if-else είναι:
func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase()
Σημείωση παραπάνω δύο δηλώσεις είναι και οι δύο έγκυρες και κάνουν την ίδια δουλειά. Όμως, χρησιμοποιώντας τη δήλωση if-let δεν μπορείτε να χρησιμοποιήσετε την ανακεφαλαιωμένη τιμή εκτός της δήλωσης if-let. Αλλά με τη δήλωση φύλαξης μπορείτε να χρησιμοποιήσετε τη μη ξετυλιγμένη τιμή μέσω της λειτουργίας.
Παράδειγμα 5: Φρουρά με πολλαπλές συνθήκες
Οι δηλώσεις φρουράς μπορούν επίσης να αλυσίσουν πολλαπλές συνθήκες διαχωρισμένες με κόμμα (,) ως:
func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Όταν εκτελείτε το παραπάνω πρόγραμμα, η έξοδος θα είναι:
Το όνομα είναι μηδέν ή μια κενή συμβολοσειρά. Δεν είναι δυνατή η επεξεργασία
Στο παραπάνω πρόγραμμα, η δήλωση φύλαξης περιέχει δύο συνθήκες που διαχωρίζονται με κόμμα.
Η πρώτη συνθήκη let temp = name
ξετυλίγει ένα προαιρετικό που επιστρέφει true
στην περίπτωσή μας και η δεύτερη συνθήκη temp.count> 0
ελέγχει εάν η μη τυλιγμένη συμβολοσειρά έχει περισσότερους από 0 χαρακτήρες που αξιολογούνται false
στο παράδειγμά μας.
Επομένως, η δήλωση μέσα στη δήλωση φύλαξης εκτελεί δήλωση print("Name is nil or an empty string. Cannot process")
που εξάγει το Όνομα είναι μηδέν ή μια κενή συμβολοσειρά. Δεν είναι δυνατή η επεξεργασία στην κονσόλα και τερματίζει τη λειτουργία με return
δήλωση.