Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- final class Lazy<T> {
- private(set) lazy var value: T = self.closure()
- private let closure: () -> T
- init(_ closure: @escaping @autoclosure () -> T) {
- self.closure = closure
- }
- func map<U>(transform: @escaping (T) -> U) -> Lazy<U> {
- return Lazy<U>(transform(self.value))
- }
- func flatMap<U>(transform: @escaping (T) -> Lazy<U>) -> Lazy<U> {
- return transform(self.value)
- }
- }
- // MARK: - Usage
- let a = Lazy(42)
- .map { $0 + 10 }
- .flatMap { value in Lazy(String(value)) }
- .value //nothing is evaluated until this line
- print(a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement