Swift Data Types Explained: Int, String, Double, Bool, and More

Swift data types define what kind of value a variable or constant can store. If you want to write correct Swift code, you need to understand the basic built-in types such as Int, String, Double, Bool, Float, and Character. In this guide, you will learn what each type does, how to use them in real code, how Swift infers types automatically, and how to avoid common mistakes like type mismatch errors.

Quick answer: Swift data types describe the kind of data a value represents, such as whole numbers, text, decimal numbers, or true/false values. The most common basic types are Int for whole numbers, String for text, Double for decimal numbers, and Bool for true or false values.

Difficulty: Beginner

Helpful to know first: You'll understand this better if you know basic Swift syntax, how to declare variables and constants, and how simple values are printed with print().

1. What Is Swift Data Types?

A data type tells Swift what kind of value is being stored or passed around in code. This matters because Swift is a type-safe language, which means it checks that you use values in sensible ways.

For example, a name should be stored as text, an age is usually a whole number, and a price may need a decimal number. Swift uses types to make these differences clear.

  • Int stores whole numbers like 5 or -12.
  • String stores text like "Hello".
  • Double stores decimal numbers like 3.14.
  • Bool stores true or false.
  • Float also stores decimal numbers, but with less precision than Double.
  • Character stores a single character like "A".

Beginners often compare Double and Float, or Character and String. Those comparisons matter because the values may look similar, but Swift treats them as different types with different purposes.

2. Why Swift Data Types Matters

Data types matter because they help Swift catch mistakes early, make your code easier to read, and ensure operations behave correctly.

If Swift did not care about types, you could accidentally add text to a number, compare unrelated values incorrectly, or lose numeric precision without noticing. By enforcing types, Swift helps prevent many bugs at compile time.

In real programs, data types are used everywhere:

  • User ages, scores, and counters often use Int.
  • Names, messages, and file paths use String.
  • Measurements, prices, and percentages often use Double.
  • On/off states, conditions, and checks use Bool.
  • Single letters or symbols may use Character.

Swift's type system is one of the reasons Swift code is usually safer and easier to maintain than loosely typed code.

3. Basic Syntax

In Swift, you can declare a variable or constant with an explicit type, or let Swift infer the type from the assigned value.

Declaring values with explicit types

This example shows the main built-in data types written clearly with type annotations.

Swift
let age: Int = 25
let name: String = "Maya"
let temperature: Double = 21.5
let isOpen: Bool = true
let grade: Character = "A"

Each line tells Swift exactly what kind of value is being stored. This is useful when you want your code to be extra clear.

Using type inference

Swift can often determine the type automatically based on the value you assign.

Swift
let count = 10
let city = "London"
let price = 19.99
let isReady = false

Here, Swift infers that count is an Int, city is a String, price is a Double, and isReady is a Bool.

Reading the core idea

The main rule is simple: the value and the type must match. If they do not match, Swift usually gives a compile-time error instead of letting incorrect code run.

4. Step-by-Step Examples

Example 1: Using Int for whole numbers

Use Int when you need numbers without decimal places, such as a score or quantity.

Swift
let apples = 4
let oranges = 6
let totalFruit = apples + oranges

print(totalFruit)
Output✓ Tested · Swift 6.4
10

This prints 10. Because all values are whole numbers, Int is the natural choice.

Example 2: Using String for text

Use String when you need words, sentences, or other text data.

Swift
let firstName = "Sam"
let lastName = "Lee"
let fullName = firstName + " " + lastName

print(fullName)
Output✓ Tested · Swift 6.4
Sam Lee

This prints Sam Lee. Swift uses + to join strings together.

Example 3: Using Double for decimal values

Use Double for decimal values such as prices, distances, or averages.

Swift
let itemPrice = 12.5
let tax = 1.25
let totalPrice = itemPrice + tax

print(totalPrice)
Output✓ Tested · Swift 6.4
13.75

This prints 13.75. Because the numbers include decimal places, Swift infers Double.

Example 4: Using Bool for conditions

Use Bool when something can be true or false.

Swift
let isLoggedIn = true

if isLoggedIn {
    print("Welcome back!")
} else {
    print("Please sign in.")
}
Output✓ Tested · Swift 6.4
Welcome back!

A boolean value is commonly used in conditions because if statements expect a Bool.

Example 5: Character vs String

A single letter may look like a short string, but Swift distinguishes Character from String.

Swift
let letter: Character = "Z"
let word: String = "Zebra"

print(letter)
print(word)
Output✓ Tested · Swift 6.4
Z
Zebra

letter stores one character, while word stores a sequence of characters. Even though both use double quotes in Swift, they are still different types.

5. Practical Use Cases

  • Use Int for item counts, page numbers, scores, IDs that are truly numeric, and loop counters.
  • Use String for names, email addresses, search terms, messages, URLs, and labels.
  • Use Double for prices, ratings, distances, percentages, durations, and scientific measurements.
  • Use Bool for flags such as isAdmin, isHidden, or hasPermission.
  • Use Character when you specifically need one symbol, such as a grade letter or menu shortcut key.
  • Use Float mainly when working with APIs or performance-sensitive code that specifically requires it.

6. Common Mistakes

Mistake 1: Mixing Int and Double without conversion

Swift does not automatically mix numeric types in arithmetic expressions. Even though Int and Double are both numbers, they are not interchangeable.

Problem: This code tries to add an Int and a Double directly, which causes a type mismatch error such as Binary operator '+' cannot be applied to operands of type 'Int' and 'Double'.

Swift
let items = 3
let pricePerItem = 4.99
let total = items + pricePerItem
Compiler output✓ Tested · Swift 6.4
error: binary operator '+' cannot be applied to operands of type 'Int' and 'Double'

Fix: Convert one value so both sides use the same numeric type.

Swift
let items = 3
let pricePerItem = 4.99
let total = Double(items) * pricePerItem

The corrected version works because both values are treated as Double before the calculation.

Mistake 2: Treating a String like a number

Text that looks like a number is still text if it is stored in a String. Swift will not automatically treat it as numeric data.

Problem: This code tries to add a string and an integer, which leads to a compile-time error such as Binary operator '+' cannot be applied to operands of type 'String' and 'Int'.

Swift
let quantityText = "5"
let extraItems = 2
let totalItems = quantityText + extraItems
Compiler output✓ Tested · Swift 6.4
error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'

Fix: Convert the string to an integer first if it truly represents a number.

Swift
let quantityText = "5"
let extraItems = 2

if let quantity = Int(quantityText) {
    let totalItems = quantity + extraItems
    print(totalItems)
}
Output✓ Tested · Swift 6.4
7

The corrected version works because the text is safely converted into an Int before arithmetic is performed.

Mistake 3: Using text instead of Bool in conditions

In some languages, developers write values like "true" as text and expect them to behave like booleans. Swift does not allow that.

Problem: An if statement requires a Bool, not a String, so this code fails with an error such as Cannot convert value of type 'String' to expected condition type 'Bool'.

Swift
let isMember = "true"

if isMember {
    print("Discount applied")
}
Compiler output✓ Tested · Swift 6.4
error: cannot convert value of type 'String' to expected condition type 'Bool'

Fix: Store true/false values using the Bool type.

Swift
let isMember = true

if isMember {
    print("Discount applied")
}
Output✓ Tested · Swift 6.4
Discount applied

The corrected version works because the condition now uses an actual boolean value.

Mistake 4: Confusing Character with String

A single letter and a piece of text may look similar, but Swift still treats them as separate types.

Problem: This code assigns a string value to a variable declared as Character, but the value contains more than one character.

Swift
let initial: Character = "AB"
Compiler output✓ Tested · Swift 6.4
error: cannot convert value of type 'String' to specified type 'Character'

Fix: Use a single-character value for Character, or change the type to String.

Swift
let initial: Character = "A"
let initials: String = "AB"

The corrected version works because each value now matches the declared type exactly.

7. Best Practices

Use the most accurate type for the job

Choosing the right type makes your code easier to understand and helps prevent mistakes. Do not use text for values that should be numeric or boolean.

Swift
// Less preferred
let ageText = "30"

// Preferred
let age = 30

The preferred version is better because the data is stored in a form that matches how it will be used.

Prefer type inference when the type is obvious

Swift's type inference keeps code shorter and cleaner. Use explicit types when they improve clarity, not by default everywhere.

Swift
// Less preferred when the type is already obvious
let username: String = "coder123"

// Preferred
let username = "coder123"

This keeps the code readable while still letting Swift know exactly what type to use.

Use Double as the default decimal type

In standard Swift code, Double is usually the better default for decimal numbers because it offers more precision than Float.

Swift
// Less preferred unless an API specifically needs Float
let distance: Float = 5.75

// Preferred
let distance: Double = 5.75

This is a good default choice for most everyday calculations in Swift.

Choose clear boolean names

Boolean values are easier to read when their names sound like yes/no questions or states.

Swift
// Less preferred
let status = true

// Preferred
let isAvailable = true

The second name makes conditions much easier to read later in the code.

8. Limitations and Edge Cases

  • Swift does not automatically convert between most types. You must convert values explicitly when needed.
  • Double and Float can store decimal values, but they can still have rounding behavior because they use binary floating-point representation.
  • Int stores whole numbers only. If you divide integers, you may lose the fractional part unless you convert to Double.
  • Character is not the same as a one-character String, even if the value looks similar.
  • Type inference is helpful, but if a value's purpose is unclear, adding an explicit type can improve readability.
  • Large numeric values can exceed the range of a type. For example, an Int cannot hold infinite-size numbers.

A common "not working" situation is integer division. For example, 5 / 2 gives 2 with Int values, not 2.5. Convert to Double if you need a fractional result.

9. Practical Mini Project

This small program uses several Swift data types together to represent a simple product summary. It shows how whole numbers, decimals, text, and booleans work together in one realistic example.

Swift
let productName: String = "Wireless Mouse"
let quantity: Int = 2
let pricePerItem: Double = 24.99
let isInStock: Bool = true
let categoryCode: Character = "E"

let totalCost = Double(quantity) * pricePerItem

print("Product:", productName)
print("Quantity:", quantity)
print("Price per item:", pricePerItem)
print("In stock:", isInStock)
print("Category code:", categoryCode)
print("Total cost:", totalCost)
Output✓ Tested · Swift 6.4
Product: Wireless Mouse
Quantity: 2
Price per item: 24.99
In stock: true
Category code: E
Total cost: 49.98

This example is useful because each value uses a type that matches its meaning. The final line also shows explicit type conversion from Int to Double before multiplication.

10. Key Points

  • Int stores whole numbers, while Double and Float store decimal numbers.
  • String stores text, and Character stores a single character.
  • Bool stores only true or false.
  • Swift can infer types automatically from assigned values.
  • Swift does not automatically convert between most types, so explicit conversion is often required.
  • Using the correct data type makes code safer, clearer, and easier to maintain.

11. Practice Exercise

Build a small profile summary using multiple Swift data types.

  • Create a String for a user's name.
  • Create an Int for the user's age.
  • Create a Double for the user's account balance.
  • Create a Bool for whether the user is active.
  • Print all four values in a readable format.

Expected output: A short summary showing the name, age, balance, and active status.

Hint: Choose the type that matches the meaning of each value, and use print() to display the result.

Show solution
Swift
let name: String = "Ava"
let age: Int = 28
let balance: Double = 152.75
let isActive: Bool = true

print("Name:", name)
print("Age:", age)
print("Balance:", balance)
print("Active:", isActive)
Output✓ Tested · Swift 6.4
Name: Ava
Age: 28
Balance: 152.75
Active: true

12. Final Summary

Swift data types are one of the first core ideas every Swift developer should understand. They tell Swift what kind of data a value contains and allow the compiler to catch mistakes early. The most common types you will use are Int for whole numbers, String for text, Double for decimal values, and Bool for true/false conditions.

You also saw that Swift supports type inference, which lets the compiler determine types automatically in many situations. At the same time, Swift remains strict about type safety, so you often need explicit conversions when working with different kinds of values. That strictness may feel limiting at first, but it helps you write safer and more predictable code.

A good next step is to learn about Swift variables and constants, operators, and type conversion in more detail. Those topics build directly on what you learned here and will help you use Swift data types more confidently in real programs.