Passing parameters into a Swift method and modifying their values
So for people who have read my blog or who know me, they would probably know that I am a Java developer in my day job(full-time contract) and coding Swift is something that I do in my spare time. So there is one thing that I do every now and again in Java and that is something like this
So after the line modifyCollection(testCollection); the testCollection will have strings one, two and three. Now let us trying something similar in Swift
You will get an error i.e. Immutable value of type [String] only has mutating members named append.
public void modifyCollection(List<String> collection) {
collection.add("one");
collection.add("two");
collection.add("three");
}
and the method is invoked as followsList<String> testCollection = new ArrayList<String>();
modifyCollection(testCollection);
So after the line modifyCollection(testCollection); the testCollection will have strings one, two and three. Now let us trying something similar in Swift
func modifyCollection(collection:[String]) { collection.append("one") collection.append("two") collection.append("three") } var strArray:[String] = [String]() modifyCollection(strArray)
You will get an error i.e. Immutable value of type [String] only has mutating members named append.
Problem
The issue is, we are not passing parameters by reference, so what we need to do is pass a parameter by reference. Great, how do we do that? well, read on to find out.
Solution
So in general there is a specific way in which we can pass parameters by reference into a Swift method using inout parameters. So in the apple docs, there is section called In-Out Parameters, which gives a detailed explanation of what the inout parameters are all about. Now, to make the above code have the same behaviour as our Java code, we need to modify the Swift code as follows,
func modifyCollection(inout collection:[String]) {
collection.append("one")
collection.append("two")
collection.append("three")
}
var strArray:[String] = [String]()
modifyCollection(&strArray)
Comments