Swift usually infers a value's type from the literal or expression used to create it.

Let Swift infer types

itemCount
type_inference.swift
Replay: real traced execution (multi-file project)
let itemCount = 4
let price = 2.5
let label = "notebook"
let inStock = true
let subtotal = Double(itemCount) * price

print("label=\(label)")
print("subtotal=\(subtotal)")
print("inStock=\(inStock)")
let itemCount = 2
let price = 2.5
let label = "notebook"
let inStock = true
let subtotal = Double(itemCount) * price

print("label=\(label)")
print("subtotal=\(subtotal)")
print("inStock=\(inStock)")
let itemCount = 7
let price = 2.5
let label = "notebook"
let inStock = true
let subtotal = Double(itemCount) * price

print("label=\(label)")
print("subtotal=\(subtotal)")
print("inStock=\(inStock)")
  1. itemCount ← 4, price ← 2.5, label ← notebook, inStock ← true, subtotal ← 10.0

    1let itemCount→ 4 = 4  //@itemCount=2, 72let price→ 2.5 = 2.53let label→ notebook = "notebook"4let inStock→ true = true5let subtotal→ 10.0 = Double(itemCount4) * price2.567print("label=\(labelnotebook)")8print("subtotal=\(subtotal10.0)")9print("inStock=\(inStocktrue)")
    outputlabel=notebook
    subtotal=10.0
    inStock=true
  1. itemCount ← 2, price ← 2.5, label ← notebook, inStock ← true, subtotal ← 5.0

    1let itemCount→ 2 = 22let price→ 2.5 = 2.53let label→ notebook = "notebook"4let inStock→ true = true5let subtotal→ 5.0 = Double(itemCount2) * price2.567print("label=\(labelnotebook)")8print("subtotal=\(subtotal5.0)")9print("inStock=\(inStocktrue)")
    outputlabel=notebook
    subtotal=5.0
    inStock=true
  1. itemCount ← 7, price ← 2.5, label ← notebook, inStock ← true, subtotal ← 17.5

    1let itemCount→ 7 = 72let price→ 2.5 = 2.53let label→ notebook = "notebook"4let inStock→ true = true5let subtotal→ 17.5 = Double(itemCount7) * price2.567print("label=\(labelnotebook)")8print("subtotal=\(subtotal17.5)")9print("inStock=\(inStocktrue)")
    outputlabel=notebook
    subtotal=17.5
    inStock=true

Follow the Values

  1. itemCount starts at 4.
  2. price is 2.5.
  3. label stays notebook, and inStock stays true.
  4. subtotal = Double(itemCount) * price becomes 10.0.
  5. The program prints label=notebook, subtotal=10.0, and inStock=true. | itemCount | price | subtotal | label | inStock | | --- | --- | --- | --- | --- | | 2 | 2.5 | 5.0 | notebook | true | | 4 | 2.5 | 10.0 | notebook | true | | 7 | 2.5 | 17.5 | notebook | true |
inference Type inference lets Swift determine `Int`, `Double`, `String`, and `Bool` without writing the type name every time.

Exercise: type_inference.swift

Reproduce subtotal=10.0, then use itemCount 2 and 7 to predict each subtotal.