In [[Swift]], you can define your own classes to take advantage of [[Class Inheritance|class inheritance]] in your application. Classes are also extensively used in [[SwiftUI]] to define elements of the graphical interface.
There are five key places where classes diverge from structs in [[Swift]]:
1. You can make one class build upon the inherited functionality (or explicitly `override` it).
2. Custom initializers are required for all classes (except if default values are provided for all properties).
3. If you copy a class instance, both instances share the same data (the data is [[Pass-By-Reference|passed-by-reference]]).
4. A special function called [[Swift Deinitializer|deinitializers]] can be called once the final instance of a class is destroyed.
5. Doesn't matter if a class instance is constant; if their properties have been defined as variable you can mutate them.
## Syntax Considerations
Inheritance works by specifying an existing class name after a colon in the class definition.
```swift
class Employee {
let hours: Int
// ...
}
class Developer: Employee {
// ...
func work() {
print("Coding for \(hours) hours.")
}
}
```
To override a function, it has to be explicitly stated using the `override` keyword. A class can be marked `final` if we want to prevent any other class inheriting from it.