SwiftyCache is a lightweight, elegant, and performant in-memory cache written purely in Swift.
It supports Least-Recently-Used (LRU) eviction logic using Swift Collectionsβ OrderedDictionary, with optional cost-based cleanup and memory warning handling for Apple platforms.
Simple. Fast. Swifty.
- β LRU (Least-Recently-Used) eviction strategy
- β
Cost-based cleanup (
totalCostLimit) - β
Count-based cleanup (
countLimit) - β
MemoryWarningcleanup - β Thread-safe design ready
- β No Objective-C / Foundation subclassing
- β 100% Swift + SPM support
- β Clean and minimal API
dependencies: [
.package(url: "https://github.com/codingiran/SwiftyCache.git", from: "1.0.0")
]Then import where needed:
import SwiftyCachelet cache = SwiftyCache<String, Data>(
totalCostLimit: 10_000, // Optional
countLimit: 100 // Optional
)cache.setValue(imageData, forKey: "avatar", cost: imageData.count)
let cachedData = cache.value(forKey: "avatar")- Least Recently Used items are automatically evicted when:
countLimitis exceededtotalCostLimitis exceeded- Memory warning(DispatchSourceMemoryPressure) is received
cache.removeValue(forKey: "avatar")
cache.removeAllValues()let cache = SwiftyCache<String, Int>(countLimit: 3)
cache.setValue(1, forKey: "A")
cache.setValue(2, forKey: "B")
cache.setValue(3, forKey: "C")
_ = cache.value(forKey: "A") // A is now most recently used
cache.setValue(4, forKey: "D") // B is evicted (least recently used)
print(cache.allKeys) // ["C", "A", "D"]- Using Swift actor for thread safety
- Implements
NSCache-like API for easy integration - Built atop
OrderedDictionaryto avoid managing doubly-linked list manually - Reorders keys internally on access to preserve LRU order
- Minimal dependencies, cleanly integrated with
DispatchSourceMemoryPressurefor memory warnings
SwiftyCache/
βββ Sources/
β βββ SwiftyCache.swift
βββ Package.swift
βββ README.md β You are hereThis project is licensed under the MIT License.
See LICENSE for more information.
Pull requests are welcome!
If you'd like to add a feature, fix a bug, or improve documentation:
- Fork the repo
- Create your feature branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m "Add some feature" - Push to the branch:
git push origin feature/your-feature - Open a Pull Request
Feel free to reach out:
π§ Email: codingiran@gmail.com
π¦ GitHub: github.com/codingiran/SwiftyCache
Made with β€οΈ by @codingiran