Types and Strings
Type Inference
Swift usually infers a value's type from the literal or expression used to create it.
Let Swift infer types
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)")
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
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
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
itemCountstarts at4.priceis2.5.labelstaysnotebook, andinStockstaystrue.subtotal = Double(itemCount) * pricebecomes10.0.- The program prints
label=notebook,subtotal=10.0, andinStock=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.