Swift version: 5.10
Both the static
and class
keywords allow us to attach variables to a class rather than to instances of a class. For example, you might create a Student
class with properties such as name
and age
, then create a static numberOfStudents
property that is owned by the Student
class itself rather than individual instances.
Where static
and class
differ is how they support inheritance: When you make a static
property it becomes owned by the class and cannot be changed by subclasses, whereas when you use class
it may be overridden if needed.
For example, here’s a Person
class with one static property and one class property:
class Person {
static var count: Int {
return 250
}
class var averageAge: Double {
return 30
}
}
If we created a Student
class by inheriting from Person
, trying to override count
(the static property) would fail to compile if uncommented, whereas trying to override averageAge
(the class property) is OK:
class Student: Person {
// THIS ISN'T ALLOWED
// override static var count: Int {
// return 150
// }
// THIS IS ALLOWED
override class var averageAge: Double {
return 19.5
}
}
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's all new Paywall Editor allow you to remotely configure your paywall view without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.