What is the difference between let and var, and between structs and classes?
let declares a constant binding and var a mutable one. For value types, let also prevents changing stored properties.
Structs are value types: assignment and passing make a copy, with copy-on-write for collections. Classes are reference types: assignment shares the same instance and mutations are visible to every reference.
struct Point { var x = 0 }
class Box { var value = 0 }
var p = Point()
var p2 = p
p2.x = 1 // p.x stays 0
let b = Box()
let b2 = b
b2.value = 1 // b.value is 1, same object
Classes add inheritance, deinitialisers and identity comparison with ===. Structs get memberwise initialisers and avoid shared mutable state, which is safer under concurrency. The standard library and SwiftUI favour structs. Prefer structs unless you need reference semantics or inheritance.