Pantry alternatives and similar libraries
Based on the "Utility" category.
Alternatively, view Pantry alternatives based on common mentions on social networks and blogs.
-
SwifterSwift
A handy collection of more than 500 native Swift extensions to boost your productivity. -
InAppSettingsKit
This iOS framework allows settings to be in-app in addition to or instead of being in the Settings app. -
Reusable
A Swift mixin for reusing views easily and in a type-safe way (UITableViewCells, UICollectionViewCells, custom UIViews, ViewControllers, Storyboards…) -
SwiftLinkPreview
It makes a preview from an URL, grabbing all the information such as title, relevant texts and images. -
BFKit-Swift
BFKit-Swift is a collection of useful classes, structs and extensions to develop Apps faster. -
VTAcknowledgementsViewController
Acknowledgements screen displaying a list of licenses, for example from CocoaPods dependencies. -
SwiftFoundation
Cross-Platform, Protocol-Oriented Programming base library to complement the Swift Standard Library. (Pure Swift, Supports Linux) -
AssistantKit
Easy way to detect iOS device properties, OS versions and work with screen sizes. Powered by Swift. -
DeviceGuru
DeviceGuru is a simple lib (Swift) to know the exact type of the device, e.g. iPhone 6 or iPhone 6s. Please ⭐️ this repo on the top right corner to make this repo popular. -
ZamzamKit
A Swift package for rapid development using a collection of micro utility extensions for Standard Library, Foundation, and other native frameworks.
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Pantry or a related project?
Popular Comparisons
README
If you're planning on using Swift 4 in the near future, please consider using the new Codable protocols which provide the same functionality as Pantry in the core Swift library. Pantry will not be supported going forward.
Installation • Issues • License
Please join us in issues if you'd like to help us get to 1.0. And read about more use cases for Pantry.
Pantry is a lightweight way to persist structs containing user data, cached content or other relevant objects for later retrieval.
let someCustomStruct = SomeCustomStruct(...)
Pantry.pack(someCustomStruct, "user_data")
... later ...
if let unpackedCustomStruct: SomeCustomStruct = Pantry.unpack("user_data") {
print("got my data out",unpackedCustomStruct)
} else {
print("there was no struct data to get")
}
You can store:
- [x] Structs
- [x] Strings, Ints and Floats (our default types)
- [x] Arrays of structs and default types
- [x] Nested structs
- [ ] Nested Arrays
- [x] Classes
- [x] Arrays of classes and default types
- [x] Nested classes
- [x] Enums with raw types
Check out the tests for a detailed look at the varied types you can easily store.
Compatibility
Pantry requires iOS 8+ and is compatible with Swift 3 projects. Please use release 0.2.2
for the final Swift 2.x supported version, or the swift2
branch. Objective-C support is unlikely.
Installation
Installation for Carthage is simple enough:
github "nickoneill/Pantry" ~> 0.3
As for CocoaPods, use this to get the latest release:
use_frameworks!
pod 'Pantry'
And import Pantry
in the files you'd like to use it.
Usage
Basic types
Pantry provides serialization of some basic types (String
, Int
, Float
, Bool
) with no setup. You can use it as a simple expiring cache like this:
if let available: Bool = Pantry.unpack("promptAvailable") {
completion(available: available)
} else {
anExpensiveOperationToDetermineAvailability({ (available) -> () in
Pantry.pack(available, key: "promptAvailable", expires: .Seconds(60 * 10))
completion(available: available)
})
}
Automagic Persistent Variables
Use Swift's get/set to automatically persist the value of a variable on write and get the latest value on read.
var autopersist: String? {
set {
if let newValue = newValue {
Pantry.pack(newValue, key: "autopersist")
}
}
get {
return Pantry.unpack("autopersist")
}
}
...later...
autopersist = "Hello!"
// restart app, reboot phone, etc
print(autopersist) // Hello!
Structs
Add the Storable
protocol to any struct you want stored and then ensure they comply by implementing an init
method that gets each property from the warehouse, and a toDictionary
method that converts the other way:
struct Basic: Storable {
let name: String
let age: Float
let number: Int
init(warehouse: Warehouseable) {
self.name = warehouse.get("name") ?? "default"
self.age = warehouse.get("age") ?? 20.5
self.number = warehouse.get("number") ?? 10
}
func toDictionary() -> [String : Any] {
return [ "name": self.name, "age": self.age, "number": self.number ]
}
}
Getters always provide an optional value, leaving you the opportunity to fill in a default if a value isn't available. This makes for hassle-free property additions to your structs.
Classes
Classes are also supported and can be setup the same way Structs are however the init method must be marked required
in this case. Class inheritance and nested Storable
properties are also possible:
class ModelBase: Storable {
let id: String
required init(warehouse: Warehouseable) {
self.id = warehouse.get("id") ?? "default_id"
}
func toDictionary() -> [String : Any] {
return [ "id": self.id ]
}
}
class BasicClassModel: ModelBase {
let name: String
let age: Float
let number: Int
required init(warehouse: Warehouseable) {
self.name = warehouse.get("name") ?? "default"
self.age = warehouse.get("age") ?? 20.5
self.number = warehouse.get("number") ?? 10
super.init(warehouse: warehouse)
}
func toDictionary() -> [String : Any] {
var dictionary = super.toDictionary()
dictionary["name"] = self.name
dictionary["age"] = self.age
dictionary["number"] = self.number
return dictionary
}
}
Also
Pantry works great with network data when paired with a JSON struct decoder such as Unbox. Download JSON, decode it with Unbox, save it with Pantry and have it available for as long as you need. The architecture of Pantry is heavily influenced by Unbox, it's worth a look in any case.
License
Pantry uses the MIT license. Please file an issue if you have any questions or if you'd like to share how you're using this tool.
ack
Pantry "can icon" by CDH from the Noun Project
*Note that all licence references and agreements mentioned in the Pantry README section above
are relevant to that project's source code only.