Manage UserDefaults Keys with Enum

Clean and easy to implement

Mohd Hafiz
2 min readApr 4, 2021

UserDefaults is commonly used to store simple persistence data or state. But, improper key management would lead to future major problem and code messiness. Moreover, sometimes the typo of key name might result to untraced bugs.

Therefore, let’s try to manage the UserDefaults keys in a cleaner way using Enum (Enumeration). Enum is a very powerful data type to group related values in a type-safe way.

So, we are going to use the Enum with String and CaseIterable. The good thing is programmer will always use the pre-defined keys in the Enum and we don’t have to worry about using incorrect key names. That’s is truly awesome!

Create Helper Class

Let start writing our custom helper class, called CustomUserDefaults. (You may try this in Playground first to be quick)

Usage

This class can simply be used with below syntax. It is almost similar to common one, but this time we got the key as Enum items. Hoorayyy!

Take note that from the CustomUserDefaults class, the get function will return result in `Any?` type. In order to make it unwrapped value, use common if let or guard syntax with casting of preferred type. See example below, the savedName is cast to String type and checked if nil or not.

Yeah, basically the helper class is ready to role! 🚀

Bonus 💰

Let’s add two more functions to give it more flexibility.

  1. A function to check if value is exist namely hasValue(key:) to check the existence of value or nil
  2. A useful function called removeAll() to clear all the stored values in UserDefaults. We usually need this when signing out user from the apps. No worries, the CaseIterable will do it for you in iteration part.

Great, now our helper class is much more complete and it should look like below.

What’s Next? Try it and extend more functionalities as you need. Thanks for reading. I hope you enjoy and try to implement into your project, so it will be much cleaner and readable.

“Learn. That’s how we grow our coding skills” ❤️

References

https://developer.apple.com/documentation/swift/caseiterable

https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html

--

--

Mohd Hafiz

iOS Developer focusing on Swift — “Read, learn & practice!”.