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 Transform your career with the iOS Lead Essentials. Unlock over 40 hours of expert training, mentorship, and community support to secure your place among the best devs. Click for early access to this limited offer and a FREE crash course.
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.