SwiftUI Observable Cache
CacheStore
SwiftUI Observable Cache
What is CacheStore
?
CacheStore
is a SwiftUI framework to help with state. Define keyed values that you can share locally or globally in your projects. CacheStore
uses c
, which a simple composition framework. c
has the ability to create transformations that are either unidirectional or bidirectional. There is also a cache that values can be set and resolved, which is used in CacheStore
.
Basic Example
Here is a simple application that has two files, an App
file and ContentView
file. The App
contains the StateObject
CacheStore
. It then adds the CacheStore
to the global cache using c
. ContentView
can then resolve the cache as an ObservableObject
which can read or write to the cache. The cache can be injected into the ContentView
directly, see ContentView_Previews
, or indirectly, see ContentView
.
DemoApp
import c
import CacheStore
import SwiftUI
enum CacheKey: Hashable {
case someValue
}
@main
struct DemoApp: App {
@StateObject var cacheStore = CacheStore<CacheKey>(
initialValues: [.someValue: "?"]
)
var body: some Scene {
c.set(value: cacheStore, forKey: "CacheStore")
return WindowGroup {
VStack {
Text("@StateObject value: \(cacheStore.resolve(.someValue) as String)")
ContentView()
}
}
}
}
ContentView
import c
import CacheStore
import SwiftUI
struct ContentView: View {
@ObservedObject var cacheStore: CacheStore<CacheKey> = c.resolve("CacheStore")
var stringValue: String {
cacheStore.resolve(.someValue)
}
var body: some View {
VStack {
Text("Current Value: \(stringValue)")
Button("Update Value") {
cacheStore.set(value: ":D", forKey: .someValue)
}
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(
cacheStore: CacheStore(
initialValues: [.someValue: "Preview Cache Value"]
)
)
}
}