By default, Swift guarantees thread safety for lazy initialization, ensuring that only one instance is created even in concurrent environments. This is a wrong assumption. Initialization is not thread-safe, the initialization block can be called multiple times in a concurrent environment. For example: class Example { lazy var value: Int = { print("Initializing value") return 42 }() } let instance = Example() DispatchQueue.global().async { print("Thread 1: \(instance.value)") } DispatchQueue.global().async { print("Thread 2: \(instance.value)") } "Initializing value" will be printed twice. See also this discussion - forums.swift.org/t/lazy-property-initialization-question/51085/8 for deeper understanding.