Μέσα στο σώμα μιας συνάρτησης, οι παράμετροι αντιμετωπίζονται ως σταθερές και όχι ως μεταβλητές. Αν προσπαθήσεις να τροποποιήσεις την τιμή μιας παραμέτρου, θα πετάξει ένα σφάλμα κατά τη μεταγλώττιση. Αν μια συνάρτηση θέλει να τροποποιήσει την τιμή μιας παραμέτρου, πρέπει να χρησιμοποιήσει μια παράμετρο εισόδου-εξόδου, ώστε να κάνει ρητή αυτή τη μεταβλητότητα.
Για να χρησιμοποιήσεις παραμέτρους εισόδου-εξόδου, πρέπει να είσαι σίγουρος για τρία πράγματα:
inout ανάμεσα στο : και στο όνομα του τύπου στη σημείωση τύπου της παραμέτρου.& στην κλήση της συνάρτησης, σημειώνοντας ρητά ότι μπορεί να τροποποιηθεί.Όταν γίνουν όλα αυτά, η συνάρτηση θα φτιάξει ένα εσωτερικό αντίγραφο της παραμέτρου εισόδου-εξόδου, θα το τροποποιήσει όπως ορίζεται στο σώμα της συνάρτησης και μετά, όταν η συνάρτηση επιστρέψει, θα αντιγράψει την τροποποιημένη τιμή πίσω στη μεταβλητή που είχε περαστεί.
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)` πετάει ένα σφάλμα κατά τη μεταγλώττιση.