# Swift Objects

> In Swift everything is an object that can receive messages. Learn how values get methods and properties, and meet the class, struct, and enum object types.

Author: Flavio Copes | Published: 2021-05-20 | Canonical: https://flaviocopes.com/swift-objects/

> This tutorial belongs to the [Swift](https://flaviocopes.com/swift-introduction/) series

In Swift, everything is an object. Even the `8` value we assigned to the `age` variable is an object.

In some languages, objects are a special type. But in Swift, everything is an object and this leads to one particular feature: every value can *receive messages*.

Each type can have multiple functions associated to it, which we call **methods**. 

For example, talking about the `8` number value, we can call its `isMultiple` method, to check if the number is a multiple of another number:

![Swift code showing age.isMultiple method calls: age.isMultiple(of: 5) returns false, age.isMultiple(of: 4) returns true](https://flaviocopes.com/images/swift-objects/Screen_Shot_2020-11-01_at_14.43.49.png)

A String value has another set of methods. 

A type also has instance variables. For example the String type has the instance variable `count`, which gives you the number of characters in a string:

![Swift code showing name.count property: var name equals Roger, print(name.count) outputs 5](https://flaviocopes.com/images/swift-objects/Screen_Shot_2020-11-01_at_14.45.39.png)

Swift has 3 different **object types**, which we'll see more in details later on: **classes**, **structs** and **enums**.

Those are very different, but they have one thing in common: to object type, we can **add methods**, and to any value, of any object type, we can **send messages**.
