# Swift Variables

> Learn how variables work in Swift, the difference between var and let constants, how type inference assigns a type, and why a variable is bound to it.

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

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

Variables let us assign a value to a label, and are defined using the `var` keyword:

```swift
var name = "Roger"
var age = 8
```

Once a variable is defined, we can change its value:

```swift
age = 9
```

Variables that you do not want to change can be defined as constants, using the `let` keyword:

```swift
let name = "Roger"
let age = 8
```

Changing the value of a constant is forbidden.

![Swift compiler error showing Cannot assign to value: age is a let constant with suggestions to change let to var](https://flaviocopes.com/images/swift-variables/Screen_Shot_2020-11-01_at_07.51.48.png)

When you define a variable and you assign it a value, Swift implicitly infers the type of it.

`8` is an `Int` value.

`"Roger"` is a `String` value.

A decimal number like `3.14` is a `Double` value.

You can also specify the type at initialization time:

```swift
let age: Int = 8
```

but it's usual to let Swift infer it, and it's mostly done when you declare a variable without initializing it.

You can declare a constant, and initialize it later:

```swift
let age : Int

age = 8
```

Once a variable is defined, it is bound to that type, and you cannot assign to it a different type, unless you explicitly convert it.

You can't do this:

```swift
var age = 8
age = "nine"
```

![Swift compiler error: Cannot assign value of type String to type Int when trying to assign nine to an Int variable](https://flaviocopes.com/images/swift-variables/Screen_Shot_2020-11-01_at_07.54.25.png)

`Int` and `String` are just two of the built-in data types provided by Swift.
