Value types and immutability
There are two different data types in Swift:
Reference types
Value types
Let's take a look at these.
Reference types
A class is a reference type. When you create an instance of a reference type and assign it to a variable or constant, you are not only assigning a value but also a reference that points to the value, which is located somewhere else (actually it is located in the heap memory). When you pass that reference to other functions and assign it to other variables, you are creating multiple references that point to the same data. If one of those variables changes the data, that change will reflect in all other variables as well. Here's an example that shows this:
let person = Person(firstName: "Sam", lastName: "Jakson") let a = person, b = person, c = person
The following diagram shows what the memory for this code would look like:
All four constants would refer to the same object. The danger in this architecture is that if one of those constants updates a piece...