Swift version: 5.6
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 Play is the first native iOS design tool created for designers and engineers. You can install Play for iOS and iPad today and sign up to check out the Beta of our macOS app with SwiftUI code export. We're also hiring engineers!
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.