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

public void modifyCollection(List<String> collection) {
    collection.add("one");
    collection.add("two");
    collection.add("three");
}
and the method is invoked as follows

List<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

Popular posts from this blog

Upload to AWS S3 from Java API

Addressing app review rejections for auto-renewing subscription in-app purchase (iOS)

Getting started with iOS programming using Swift (Part 1)