This project is deprecated, and will not be updated in future. Memo is a complete replacement for its functionality, and is better-tested, -documented, and -spoken.
This is a Swift microframework which implements a lazily-evaluated memoizing wrapper type.
It’s a bit like a promise.
- Closures do not automatically memoize; Delay will evaluate zero or one times, whereas closures will evaluate every time they are called.
- Closures are currently subject to
non-fixed multi-payload enum layout
errors; since Delay is a class, it does not cause these problems forenum
layout.
func expensiveComputation() -> Int
let delayedResult = delay(expensiveComputation())
let actualResult = delay.force() // explicitly force it
let otherActualResult: Int = delay // use the implicit __conversion
See Delay.swift
for more details.
-
Add this repo as a submodule in e.g.
External/Delay
:git submodule add https://github.com/robrix/Delay.git External/Delay
-
Drag
Delay.xcodeproj
into your.xcworkspace
/.xcodeproj
. -
Add
Delay.framework
to your target’sLink Binary With Libraries
build phase. -
You may also want to add a
Copy Files
phase which copiesDelay.framework
(and any other framework dependencies you need) into your bundle’sFrameworks
directory. If your target is a framework, you may instead want the client app to includeDelay.framework
.