Skip to content

Instantly share code, notes, and snippets.

@ryanashcraft
Created July 10, 2019 04:19
Show Gist options
  • Save ryanashcraft/db47ef38e090ac8a4dcdf34fd4db1903 to your computer and use it in GitHub Desktop.
Save ryanashcraft/db47ef38e090ac8a4dcdf34fd4db1903 to your computer and use it in GitHub Desktop.
struct Memoized<A: Equatable, R> {
typealias Value = (_ params: A) -> R
var callback: Value
@XState private var prevParam: A? = nil
@XState private var prevValue: R? = nil
init(_ callback: @escaping Value) {
self.callback = callback
}
func call(_ param: A) -> R {
defer {
self.prevParam = param
}
if self.prevParam != param {
self.prevValue = callback(param)
}
return self.prevValue!
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment