Value types vs. reference types
Value and reference types differ in their assignment behavior, which is just the name for what Swift actually does whenever you assign a value to a variable. You assign values all the time; for example, whenever you assign to global variables, local variables, or to properties. You also assign whenever you call a function, effectively assigning a value to the function’s parameter.