Egy függvény törzsén belül a paramétereket állandóként, nem változóként kezeljük; ha megpróbálod módosítani egy paraméter értékét, az fordítási idejű hibát vált ki. Ha egy függvény módosítani szeretné egy paraméter értékét, in-out paramétert kell használnia, hogy ezt a módosíthatóságot egyértelművé tegye.
Ahhoz, hogy in-out paramétereket használhass, három dologra kell figyelned:
inout kulcsszót a : és a típusnév közé írod a paraméter típusannotációjában.& jelet kell tenni, ezzel egyértelműen jelölve, hogy módosítható.Amikor ez megtörténik, a függvény belső másolatot készít az in-out paraméterről, a függvény törzsében leírtak szerint módosítja, majd amikor a függvény visszatér, a módosított értéket visszamásolja abba a változóba, amelyet átadtak.
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
Van néhány további szabály, amit érdemes szem előtt tartanod az in-out paraméterekkel kapcsolatban.
1. Egy in-out paramétereket használó függvényen belül nem hivatkozhatsz arra a változóra, amelyet in-out paraméterként adtál át.
2. Ugyanaz a változó nem adható át több in-out paraméterként ugyanabban a függvényben.
Például az `inoutFunc(&mutVar, &mutVar)` hívás fordítási idejű hibát vált ki.