Created
July 10, 2019 04:19
-
-
Save ryanashcraft/db47ef38e090ac8a4dcdf34fd4db1903 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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