A type-safe swifty wrapper around NSCache.
Add swift-cache as a dependency to your project using SPM.
.package(url: "https://github.com/binaryscraping/swift-cache", from: "0.1.0"),And in your application/target, add "Cache" to your "dependencies".
.target(
  name: "YourTarget",
  dependencies: [
    .product(name: "Cache", package: "swift-cache"),
  ]
)Cache is accessed through a Cache.Key type, so start by defining your keys.
extension Cache.Key where Value == String {
  // A key that stores a string value.
  static let myKey = Cache.Key("my_key")
}Instantiate a live implementation of the cache type.
let cache = Cache.live()cache.set("string value", at: .myKey)You can provide an optional lifetime in seconds for the entry.
cache.set("string value", at: .myKey, lifetime: 60)let value = cache.retrieve(at: .myKey)cache.remove(at: .myKey)This library provides some helpers for easy usage on tests such as:
An implementation of Cache that does nothing when called.
let cache = Cache.noopAn implementation of Cache that fails with an XCTFail call.
var setEntryCalled = false
let cache = Cache.failing
  .override(
    setEntry: { entry, key in 
      setEntryCalled = true
    }
  )
  
cache.set("string value", at: .myKey)
  
XCTAssertTrue(setEntryCalled)At the code snipped above all calls to a method that wasn't overriden will terminate with a XCTFail.