Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.59 KB | None | 0 0
  1. final class Lazy<T> {
  2. private(set) lazy var value: T = self.closure()
  3. private let closure: () -> T
  4.  
  5. init(_ closure: @escaping @autoclosure () -> T) {
  6. self.closure = closure
  7. }
  8.  
  9. func map<U>(transform: @escaping (T) -> U) -> Lazy<U> {
  10. return Lazy<U>(transform(self.value))
  11. }
  12.  
  13. func flatMap<U>(transform: @escaping (T) -> Lazy<U>) -> Lazy<U> {
  14. return transform(self.value)
  15. }
  16. }
  17.  
  18. // MARK: - Usage
  19.  
  20. let a = Lazy(42)
  21. .map { $0 + 10 }
  22. .flatMap { value in Lazy(String(value)) }
  23. .value //nothing is evaluated until this line
  24.  
  25. print(a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement