Extensions add methods to an existing type without changing the original declaration.

Add behavior to a string

word
extension_methods.swift
Replay: real traced execution (multi-file project)
extension String {
    func shout() -> String {
        return uppercased() + "!"
    }
}

let word = "trace"
let message = word.shout()

print(message)
extension String {
    func shout() -> String {
        return uppercased() + "!"
    }
}

let word = "swift"
let message = word.shout()

print(message)
extension String {
    func shout() -> String {
        return uppercased() + "!"
    }
}

let word = "replay"
let message = word.shout()

print(message)
  1. word ← trace

    7let word→ trace = "trace"  //@word="swift", "replay"8let message = wordtrace.shout()
  2. message ← TRACE!

    7let word = "trace"  //@word="swift", "replay"8let message→ TRACE! = wordtrace.shout()910print(messageTRACE!)
    outputTRACE!
  1. word ← swift

    7let word→ swift = "swift"8let message = wordswift.shout()
  2. message ← SWIFT!

    7let word = "swift"8let message→ SWIFT! = wordswift.shout()910print(messageSWIFT!)
    outputSWIFT!
  1. word ← replay

    7let word→ replay = "replay"8let message = wordreplay.shout()
  2. message ← REPLAY!

    7let word = "replay"8let message→ REPLAY! = wordreplay.shout()910print(messageREPLAY!)
    outputREPLAY!
extension method An extension method is called like a normal method on values of the extended type.