up repeatedly. Rather than hardcode a fixed set of patterns into the compiler (as we have done for lazy and @NSCopying), we should provide a general "property wrapper" mechanism to allow these patterns to be defined as libraries.
LateInitialized<T> { private var storage: T? var wrappedValue: T { get { guard let value = storage else { fatalError() } return value } set { storage = newValue } } }