The lazy Property
Defer transformation work until needed.
The lazy Property is a free Swift Academy lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Swift Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Eager by Default
Standard collection methods are eager: map, filter, etc. run immediately and build a full new array right away, even if you only read the first element.
Eager Work Happens Now
This builds the entire transformed array up front:
let nums = [1, 2, 3, 4, 5]
let doubled = nums.map { $0 * 2 } // whole array built now
print(doubled.first!) // 2The lazy Property
Every collection exposes a .lazy view. Operations on a lazy view are deferred: they do not run until you actually iterate or ask for a specific element.
Creating a Lazy View
Just prefix the chain with .lazy:
let nums = [1, 2, 3, 4, 5]
let view = nums.lazy.map { $0 * 2 }
// nothing computed yet
print(Array(view)) // [2, 4, 6, 8, 10]Deferred Execution Proof
Side effects show that the closure runs only on demand:
let nums = [1, 2, 3]
let lazyMapped = nums.lazy.map { n -> Int in
print("transforming \(n)")
return n * 2
}
print("created view")
print(lazyMapped.first!) // prints "transforming 1" then 2Lazy Returns a Different Type
A lazy chain is a lightweight wrapper, not an Array:
let nums = [1, 2, 3]
let view = nums.lazy.map { $0 + 1 }
print(type(of: view).self != [Int].self) // true -- it is a LazyMapSequenceMaterializing a Lazy View
Convert back to a concrete array with Array(...) when you need to store or return it:
let nums = [1, 2, 3]
let result: [Int] = Array(nums.lazy.map { $0 * 10 })
print(result) // [10, 20, 30]Lazy and first(where:)
Laziness pays off when you stop early. Only enough elements are processed to find a match:
let nums = [1, 2, 3, 4, 5, 6]
let firstBig = nums.lazy.map { $0 * $0 }.first { $0 > 10 }
print(firstBig!) // 16 (stops at 4*4)Lazy over a Range
Ranges work with lazy too, useful for large or infinite-ish sequences:
let firstThree = (1...1000).lazy.map { $0 * $0 }.prefix(3)
print(Array(firstThree)) // [1, 4, 9]When the View Is Re-evaluated
A lazy view recomputes each time you iterate it — it stores no results. Iterate twice and the transform runs twice:
var calls = 0
let view = [1, 2].lazy.map { (n: Int) -> Int in calls += 1; return n }
_ = Array(view)
_ = Array(view)
print(calls) // 4Reaching for lazy
Add .lazy when you have a long chain but only consume part of the result — the first match, a prefix, or a single reduce. For small arrays consumed fully, eager is simpler.
let nums = Array(1...100)
let result = nums.lazy.filter { $0 % 7 == 0 }.first
print(result!) // 7Quick Check
What does the .lazy property change about map and filter?
Recap
You learned lazy basics:
- Standard collection methods are eager — they build arrays immediately
.lazyreturns a deferred view (a special sequence type)- Work happens only when you iterate or ask for an element
- Materialize with
Array(...); views re-run each iteration
Next: lazy map and filter chains.
Frequently asked questions
Is the “The lazy Property” lesson free?
Yes — the full text of “The lazy Property” is free to read here on the web, and the Swift Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Swift Academy course, upgrade to CoddyKit PRO.
What will I learn in “The lazy Property”?
Defer transformation work until needed. You practise Swift Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Swift Academy?
No prior experience is required. Swift Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “The lazy Property” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Swift Academy lesson?
Yes. Every Swift Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.