Swift version: 5.10
When you pass value types as parameters into a function, they are constants and so can’t be modified. Sometimes it would be convenient to change this so you can modify the values, and that’s what inout
does for us: it lets us modify parameters inside a function, and have those changes persist outside the function.
For example, we could write a function that accepts a number and doubles it:
func double(_ number: inout Int) {
number *= 2
}
That doesn’t return a value – it modifies the value that was passed in directly.
When it comes to calling functions with inout
parameters, Swift has two rules: we must pass in variables, and we also need to use &
before the parameter name to acknowledge that it might be changed.
So, we would call double()
like this:
var number = 5
double(&number)
print(number)
That will print 10.
inout
parameters are more common than you might realize. For example, if you use +=
to append one string to another, it uses inout
to modify the string in place.
SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.