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 Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
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.