Conform Apple “Structures and Enumerations Are Value Types” iar mai jos că “Classes Are Reference Types”.
Explicatie pe scurt!
struct Informatii { var info: Int; } var firstStruct = Informatii(info:3) var secondStruct = firstStruct firstStruct.info = 10 print("\(firstStruct.info), \(secondStruct.info)") // prints "10, 3"
Struct-ul, la fel ca si ENUM si TUPLU în SWIFT, fiind de tip valoare, atunci cand este copiata va crea o instanță independentă care va avea propriul său conținut independent de cel al sursei din care s-a copiat. Un fel de clonă independentă am putea spune.
class Informatii { var info: Int; } var firstObject = Informatii(info:3) var secondObject = firstObject firstObject.info = 10 print("\(firstObject.info), \(secondObject.info)") // prints "10, 10"
Deși în acest caz vorbim doar de înlocuirea unui cuvânt din STRUCT în CLASS, deosebirile sunt remarcabile.
firstObject este o instanță de tip Informatii. Are o zonă de memorie alocată și practic este un pointer către acea zonă.
Atunci când executăm secondObject = firstObject, ambele fiind deci de instanțe de clasă adică de tip referință, secondObject va pointa de fapt către aceeași zonă de memorie în care pointa și firstObject. Orice modificare efectuată de firstObject se va oglindi în secondObject.