Διαδρομές
/
Swift
Swift
/
Ύλη
/
Παράμετροι inout
Πα

Παράμετροι inout σε Swift

1 άσκηση

Σχετικά με την έννοια Παράμετροι inout

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

Για να χρησιμοποιήσεις παραμέτρους εισόδου-εξόδου, πρέπει να είσαι σίγουρος για τρία πράγματα:

  1. Ο ορισμός της συνάρτησης πρέπει να σημειώνει ρητά τις παραμέτρους εισόδου-εξόδου, γράφοντας τη λέξη-κλειδί inout ανάμεσα στο : και στο όνομα του τύπου στη σημείωση τύπου της παραμέτρου.
  2. Η τιμή που περνάει στην παράμετρο εισόδου-εξόδου πρέπει να έχει δηλωθεί ως μεταβλητή, όχι ως σταθερά. Παρομοίως, δεν μπορεί να είναι ένα literal.
  3. Το όνομα της μεταβλητής πρέπει να προηγείται από ένα & στην κλήση της συνάρτησης, σημειώνοντας ρητά ότι μπορεί να τροποποιηθεί.

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

func updateVersion(_ record: inout (version: Int, title: String)) {
  record.version += 1
}

var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)

// dbRecord is now (3, "Exercism")
Υπάρχουν μερικοί επιπλέον κανόνες που πρέπει να γνωρίζεις σχετικά με τις παραμέτρους εισόδου-εξόδου.

1. Μέσα σε μια συνάρτηση με παραμέτρους εισόδου-εξόδου, δεν επιτρέπεται να αναφερθείς στη μεταβλητή που περάστηκε ως παράμετρος εισόδου-εξόδου.
2. Η ίδια μεταβλητή δεν μπορεί να περαστεί ως πολλαπλές παράμετροι εισόδου-εξόδου στην ίδια συνάρτηση.
   Για παράδειγμα, το `inoutFunc(&mutVar, &mutVar)` πετάει ένα σφάλμα κατά τη μεταγλώττιση.
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Παράμετροι inout