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 Debug 10x faster with Proxyman. Your ultimate tool to capture HTTPs requests/ responses, natively built for iPhone and macOS. You’d be surprised how much you can learn about any system by watching what it does over the network.
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.