Swiftpack.co - raulriera/Cacher as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by raulriera.
raulriera/Cacher 1.2.1
Super simple caching solution for iOS, macOS, tvOS and watchOS.
⭐️ 172
🕓 2 weeks ago
.package(url: "https://github.com/raulriera/Cacher.git", from: "1.2.1")

Build Status

For a detail information about using "Cacher", checkout the article "Caching anything in iOS".



Drag and drop the Cacher/ folder into your project.


Add the following to your Cartfile:

github "raulriera/Cacher"

Swift Package Manager

Add this repo to your dependencies.

How to use them

For a quick TL;DR check out the sample project at CacherDemo. It will guide you with the simplest caching possible, persisting string values.

If you like to get your hands dirty, continue reading as we are going to go into detail about how this works.

public protocol Cachable {
	var fileName: String { get }
	func transform() -> Data

It all comes down to this simple protocol, that has only two requirements fileName which represents the unique name to store in the filesystem, and transform which is the Data representation of what you wish to import. Using the magic of Swift 4 Codable, we can skip the transform implementation and use the implicit one declared right here.

After we implement conform to Cachable and Codable, anything can be stored in the filesystem using the persist:item:completion method.

But, let's see a more complex example

struct CachableMovies: Cachable, Codable {
	let store: String
	let movies: [Movie]

	var fileName: String {
		return "movies-\(store)"

	init(store: String, movies: [Movie]) {
		self.store = store
		self.movies = movies

struct Movie: Codable {
  enum CodingKeys : String, CodingKey {
  		case title = "movie_title"
  		case description = "movie_description"
  		case url = "movie_url"

  let title: String
  let description: String
  let url: URL

The previous code is all we need to store a collection of movies into the filesystem. 🎉 Now we can simply use the persist method like this.

Cacher(destination: .temporary).persist(item: CachableMovies(store: "USA", movies: myArrayOfMovies)) { url, error in
	// Completion handler when the process finishes

Created by

Raul Riera, @raulriera


Stars: 172
Last commit: 2 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Related Packages

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics