Swift is an object oriented programming language. Almost everything in Swift is an object, with its attributes and methods.
Class creates a user-defined data structure, which holds its own data members (attributes) and member functions (methods), which can be accessed and used by creating an instance of that class.
Classes are like a blueprint for objects outlining possible behaviors and states that every object of a certain type could have.
Classes are defined via the keyword class, like this:
// Define an empty class Employee
class Employee {
}
Objects/Instances
An Object is an instance of a Class. A class is like a blueprint while an instance is a copy of the class with actual values. It's not an idea anymore, it's an actual employee, like a person named "Andrew" who is 30 years old.
You can have many employees to create many different instances, but without the class as a guide, you would be lost, not knowing what information is required.
After a class is defined, we can create objects of the class like this:
// Define an empty class Employee
class Employee {
}
// inside main function:
var employee = Employee()
Attributes/Properties
A class attribute is a Swift variable that belongs to a class and is shared between all the objects of this class. Let's add some attributes to our Employee class:
class Employee {
var name: String = ""
var age: Int = 0
}
// inside main function:
var emp1 = Employee()
emp1.name = "Andrew"
print(emp1.name) // prints "Andrew"
var emp2 = Employee()
emp2.age = 40
print(emp2.age) // prints 40
We added two properties: the String name and the Int age. Then, we created two different Employee objects emp1 and emp2.
The attributes of objects can be accessed and modified using the dot operator (.), like we did above with emp1.name and emp2.age.
The keyword var used inside the class declares a mutable stored property. name and age are mutable properties, which means they can be accessed and changed from anywhere in the code.
Constructors
In real life, we want to set the attributes specific to each object when creating it. For example, an employee named Andrew of 30 years old and another one named Mary of 25 years old. Here the constructor comes to rescue.
A constructor is a special type of method (function) which is used to initialize the instance members of the class.
In Swift the constructor is called init and is always called when an object is created.
Let's add a constructor to our Employee class:
class Employee {
var name: String
var age: Int
// constructor:
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// inside main function:
let emp1 = Employee(name: "Andrew", age: 30)
print(emp1.name)
let emp2 = Employee(name: "Mary", age: 25)
print(emp2.age)
// prints "Andrew" and 25 on different lines
The "self"
Every object in Swift has access to itself through an important reference called self.
The self reference is an implicit parameter to all member functions. Therefore, inside a member function, self may be used to access and manipulate the attributes of that object, like we did above with self.name = name.
Member functions
Member functions are functions that belong to the class:
class Employee {
var name: String
var age: Int
// constructor:
init(name: String, age: Int) {
self.name = name
self.age = age
}
// member functions:
func printName() {
print(name) // it is not mandatory to use "self" to access a property
}
func printEmployee() {
printName()
print(age)
}
}
// inside main function:
let emp1 = Employee(name: "Andrew", age: 30)
emp1.printEmployee() // prints "Andrew", 30
let emp2 = Employee(name: "Mary", age: 25)
emp2.printEmployee() // prints "Mary", 25
As you can see, we access functions just like we access attributes: using the dot syntax (.).
The function call uses the attributes of the object it was called on. That's why the first printEmployee() prints "Andrew" and 30 and the second prints "Mary" and 25.
Assignment
Follow the Coding Tutorial and let's write some classes.
Hint
Look at the examples above if you get stuck.
Free plan: 30 tutor messages. Premium is unlimited.