Swift has only two categories for types. Value, and reference.
"A Value Type holds the data within its own memory allocation and a Reference Type contains a pointer to another memory location that holds the real data."
Value type: each instance holds an independent value after copying. So, if you have a value type, we'll call it 'a', and you assign it to another variable, 'var b = a', you now have two different values. Changing the value of either will not effect the value of the other. In Swift, value types are structs, enums, or tuples.
Reference type: each instance holds a reference to the same value, after copying. If we have a reference type, we'll call it 'a' and we assign it to another variable, 'var b = a', we now have two things that reference the same value. Changing either a or b will change the value of the other as well, since they reference the same value. In Swift, reference types are classes.
From Apple: "Types in Swift fall into one of two categories: first, "value types", where each instance keeps a unique copy of its data, usually defined as a struct, enum, or tuple. The second, "reference types", where instances share a single copy of the data, and the type is usually defined as a class. In this post we explore the merits of value and reference types, and how to choose between them."